PHP基于DOMDocument解析和生成xml的方法分析


Posted in PHP onJuly 17, 2017

本文实例讲述了PHP基于DOMDocument解析和生成xml的方法。分享给大家供大家参考,具体如下:

前面和大家分享了SimpleXML操作xml的一些知识,但是php中除了simplexml还有DOMDocument,这次就着重来看看DOMDocument的用法,还是把生成xml和解析xml分开写

1. xml的生成

DOMDocument操作xml要比先前的simplexml要复杂一点,我觉得simplexml就想Java里的dom4j,不管怎样原理都是一样的。如果把DOMDocument里的节点,属性看做是枝叶那么DOMDocument的DOMDocument就是根,节点和属性都挂载在这个对象下面。看看下面的代码就很清楚了

<?php
 $doc=new DOMDocument('1.0','utf-8');
 //创建根节点
 $root=$doc->createElement("StudentInfo");
 //创建第一个子节点
 $item=$doc->createElement("Item");
 $name=$doc->createElement("name","蔡依林");
 $studentnum=$doc->createElement("num","2009010502");
 //创建属性(phpdom可以把任何元素当做子节点)
 $id=$doc->createAttribute("id");
 $value=$doc->createTextNode('1');
 $id->appendChild($value);
 //在父节点下面加入子节点
 $item->appendChild($name);
 $item->appendChild($studentnum);
 $item->appendChild($id);
 $item2=$doc->createElement("Item");
 $name2=$doc->createElement("name","潘玮柏");
 $studentnum2=$doc->createElement("num","2009010505");
 $id2=$doc->createAttribute("id");
 $value2=$doc->createTextNode('2');
 $id2->appendChild($value2);
 $item2->appendChild($name2);
 $item2->appendChild($studentnum2);
 $item2->appendChild($id2);
 $root->appendChild($item);
 $root->appendChild($item2);
 //把根节点挂载在DOMDocument对象
 $doc->appendChild($root);
 header("Content-type: text/xml");
 //在页面上输出xml
 echo $doc->saveXML();
 //将xml保存成文件
 $doc->save("stu.xml");
?>

这段代码仔细看的话其实不复杂,可能性在id属性的那个地方会有点疑问,文本节点也必须挂载在DOMDocument下面,之后把文本节点挂载在属性下面。来看下生成的xml

PHP基于DOMDocument解析和生成xml的方法分析

其实DOMDocument是首先生成节点或属性,而xml的层级关系是最后通过addchild来体现的

2. DOMDocument解析

<?php
 $doc=new DOMDocument();
 //如果是解析xml字符串则使用loadXML
 $doc->load('stu.xml');
 //取得根节点
 $root=$doc->documentElement;
 //通过标记的名字取得对应的元素
 $items=$root->getElementsByTagName('Item');
 foreach($items as $key=>$val){
  // echo count($val->attributes);
  //id是第一个属性所以使用item(0),nodeValue用来取得节点的值
  echo $val->attributes->item(0)->name.":".$val->attributes->item(0)->nodeValue."  ";
  foreach($val->getElementsByTagName('name') as $key2=>$val2){
    echo $val2->nodeValue."  ";
  }
  foreach($val->getElementsByTagName('num') as $key3=>$val4){
    echo $val4->nodeValue."</br>";
  }
 }
?>

解析的话重在理解,getElementsByTagName方法,attributes属性和item是解析xml的重点。别的都算简单,看看解析出来的东西

PHP基于DOMDocument解析和生成xml的方法分析

总的来说是比simplexml麻烦一些,但是作为程序员还能接受吧。

PHP 相关文章推荐
PHP 获取文件路径(灵活应用__FILE__)
Feb 15 PHP
利用PHP实现图片等比例放大和缩小的方法详解
Jun 06 PHP
PHP设计模式之结构模式的深入解析
Jun 13 PHP
解析PHP留言本模块主要功能的函数说明(代码可实现)
Jun 25 PHP
php 生成自动创建文件夹并上传文件的示例代码
Mar 07 PHP
php实现删除空目录的方法
Mar 16 PHP
PHP永久登录、记住我功能实现方法和安全做法
Apr 27 PHP
PHP创建word文档的方法(平台无关)
Mar 29 PHP
PHPCMS2008广告模板SQL注入漏洞修复
Oct 11 PHP
thinkPHP框架对接支付宝即时到账接口回调操作示例
Nov 14 PHP
php 将json格式数据转换成数组的方法
Aug 21 PHP
phpcmsv9.0任意文件上传漏洞解析
Oct 20 PHP
PHP基于SimpleXML生成和解析xml的方法示例
Jul 17 #PHP
PHP实现限制IP访问及提交次数的方法详解
Jul 17 #PHP
PHP提取字符串中的手机号正则表达式怎么写
Jul 17 #PHP
老生常谈PHP中的数据结构:DS扩展
Jul 17 #PHP
PHPstorm快捷键(分享)
Jul 17 #PHP
利用PHP_XLSXWriter代替PHPExcel的方法示例
Jul 16 #PHP
PHP常用操作类之通信数据封装类的实现
Jul 16 #PHP
You might like
PHP利用str_replace防注入的方法
2013/11/10 PHP
php与flash as3 socket通信传送文件实现代码
2014/08/16 PHP
浅谈php中的循环while、do...while、for、foreach四种循环
2016/11/05 PHP
Laravel 5.5基于内置的Auth模块实现前后台登陆详解
2017/12/21 PHP
关于Curl在Swoole协程中的解决方案详析
2019/09/12 PHP
PHP fopen中文文件名乱码问题解决方案
2020/10/28 PHP
Javascript打印网页部分内容的脚本
2008/11/17 Javascript
jquery imgareaselect 使用利用js与程序结合实现图片剪切
2009/07/30 Javascript
JavaScript判断窗口是否最小化的代码(跨浏览器)
2010/08/01 Javascript
javascript中删除指定数组中指定的元素的代码
2011/02/12 Javascript
对new functionName()定义一个函数的理解
2014/05/22 Javascript
2014 HTML5/CSS3热门动画特效TOP10
2014/12/07 Javascript
jquery实现的简单二级菜单效果代码
2015/09/22 Javascript
基于js中this和event 的区别(详解)
2017/10/24 Javascript
微信小程序switch组件使用详解
2018/01/31 Javascript
JS实现的哈夫曼编码示例【原始版与修改版】
2018/04/22 Javascript
nodejs的路径问题的解决
2018/06/30 NodeJs
Vue作用域插槽slot-scope实例代码
2018/09/05 Javascript
javascript事件监听与事件委托实例详解
2019/08/16 Javascript
ant design的table组件实现全选功能以及自定义分页
2020/11/17 Javascript
Angular处理未可知异常错误的方法详解
2021/01/17 Javascript
简单谈谈Python中的json与pickle
2017/07/19 Python
Python中列表list以及list与数组array的相互转换实现方法
2017/09/22 Python
python搭建服务器实现两个Android客户端间收发消息
2018/04/12 Python
TensorFlow基于MNIST数据集实现车牌识别(初步演示版)
2019/08/05 Python
如何修复使用 Python ORM 工具 SQLAlchemy 时的常见陷阱
2019/11/19 Python
python GUI库图形界面开发之PyQt5滑块条控件QSlider详细使用方法与实例
2020/02/28 Python
如何查看python关键字
2021/01/17 Python
手把手教你用Django执行原生SQL的方法
2021/02/18 Python
Python中生成ndarray实例讲解
2021/02/22 Python
东芝官网商城:还原日式美学,打造美好生活
2018/12/27 全球购物
中国一家综合的外贸B2C电子商务网站:DealeXtreme(DX)
2020/03/10 全球购物
个人授权委托书
2014/09/15 职场文书
2015年初中元旦晚会活动总结
2014/11/28 职场文书
红色故事汇观后感
2015/06/18 职场文书
小学2016年“我们的节日·重阳节”活动总结
2016/04/01 职场文书