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桌面中心(三) 修改数据库
Mar 11 PHP
深入理解PHP原理之异常机制
Aug 21 PHP
真正根据utf8编码的规律来进行截取字符串的函数(utf8版sub_str )
Oct 24 PHP
ThinkPHP使用PHPExcel实现Excel数据导入导出完整实例
Jul 22 PHP
thinkphp普通查询与表达式查询实例分析
Nov 24 PHP
PHP遍历XML文档所有节点的方法
Mar 12 PHP
php实现用已经过去多长时间的方式显示时间
Jun 05 PHP
又拍云异步上传实例教程详解
Apr 19 PHP
PHP基于反射机制实现插件的可插拔设计详解
Nov 10 PHP
php 人员权限管理(RBAC)实例(推荐)
May 24 PHP
thinkPHP框架乐观锁和悲观锁实例分析
Oct 30 PHP
laravel 框架实现无限级分类的方法示例
Oct 31 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循环获取GET和POST值的代码
2008/04/09 PHP
PHP经典面试题集锦
2015/03/19 PHP
ThinkPHP3.2.1图片验证码实现方法
2016/08/19 PHP
Avengerls vs KG BO3 第一场2.18
2021/03/10 DOTA
jquery 实现密码框的显示与隐藏示例代码
2013/09/18 Javascript
JS动态添加与删除select中的Option对象(示例代码)
2013/12/20 Javascript
js 获取、清空input type=&quot;file&quot;的值示例代码
2014/02/19 Javascript
jQuery如何取id有.的值一般的方法是取不到的
2014/04/18 Javascript
Node.js中HTTP模块与事件模块详解
2014/11/14 Javascript
jQuery中(function($){})(jQuery)详解
2015/07/15 Javascript
jQuery获取访问者IP地址的方法(基于新浪API与QQ查询接口)
2016/05/25 Javascript
关于JS 预解释的相关理解
2016/06/28 Javascript
angularJS Provider、factory、service详解及实例代码
2016/09/21 Javascript
微信小程序 登陆流程详细介绍
2017/01/17 Javascript
Node.js path模块,获取文件后缀名操作
2020/11/07 Javascript
vue实现表格合并功能
2020/12/01 Vue.js
[49:54]Ti4 循环赛第三日 LGD vs Titan
2014/07/12 DOTA
[04:46]2018年度玩家喜爱的电竞媒体-完美盛典
2018/12/16 DOTA
Python中的pprint折腾记
2015/01/21 Python
Python的设计模式编程入门指南
2015/04/02 Python
理解Python中函数的参数
2015/04/27 Python
Windows下安装Django框架的方法简明教程
2018/03/28 Python
PyQt5实现简易电子词典
2019/06/25 Python
基于Pycharm加载多个项目过程图解
2020/01/19 Python
python开发实例之Python的Twisted框架中Deferred对象的详细用法与实例
2020/03/19 Python
websocket+sockjs+stompjs详解及实例代码
2018/11/30 HTML / CSS
应届生学校辅导员求职信
2013/11/07 职场文书
预备党员的自我评价
2014/03/12 职场文书
《灰椋鸟》教学反思
2014/04/27 职场文书
室内设计专业自荐信
2014/05/31 职场文书
工地安全生产标语
2014/06/06 职场文书
2015年度培训工作总结范文
2015/04/02 职场文书
活动新闻稿范文
2015/07/17 职场文书
教师听课学习心得体会
2016/01/15 职场文书
2019新员工试用期转正申请书3篇
2019/08/13 职场文书
少年的你:世界上没有如果,要在第一次就勇敢的反抗
2019/11/20 职场文书