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 相关文章推荐
杏林同学录(二)
Oct 09 PHP
对squid中refresh_pattern的一些理解和建议
Apr 17 PHP
PHP开发中常用的字符串操作函数
Feb 08 PHP
PHP中__FILE__、dirname与basename用法实例分析
Dec 01 PHP
通过php添加xml文档内容的方法
Jan 23 PHP
php使用cookie显示用户上次访问网站日期的方法
Jan 26 PHP
Bootstrap+PHP实现多图上传功能实例详解
Apr 08 PHP
PHP基于rabbitmq操作类的生产者和消费者功能示例
Jun 16 PHP
PHP实现微信商户支付企业付款到零钱功能
Sep 30 PHP
PHP hebrev()函数用法讲解
Feb 21 PHP
Thinkphp5框架简单实现钩子(Hook)行为的方法示例
Sep 03 PHP
PHP获取php,mysql,apche的版本信息及更多服务器信息
Mar 09 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中的日期及时间
2006/11/23 PHP
php批量更改数据库表前缀实现方法
2013/10/26 PHP
php ci框架中加载css和js文件失败的解决方法
2014/03/03 PHP
PHP FTP操作类代码( 上传、拷贝、移动、删除文件/创建目录)
2014/05/10 PHP
对字符串进行HTML编码和解码的JavaScript函数
2010/02/01 Javascript
Jquery练习之表单验证实现代码
2010/12/14 Javascript
jQuery获取当前对象标签名称的方法
2014/02/07 Javascript
FF(火狐)浏览器无法执行window.close()解决方案
2014/11/13 Javascript
Jquery 实现table样式的设定
2015/01/28 Javascript
javascript函数式编程实例分析
2015/04/25 Javascript
浅析JSONP技术原理及实现
2016/06/08 Javascript
几种二级联动案例(jQuery\Array\Ajax php)
2016/08/13 Javascript
javascript中对象的定义、使用以及对象和原型链操作小结
2016/12/14 Javascript
jquery仿京东侧边栏导航效果
2017/03/02 Javascript
jquery实现的table排序功能示例
2017/03/10 Javascript
360提示[高危]使用存在漏洞的JQuery版本的解决方法
2017/10/27 jQuery
tween.js缓动补间动画算法示例
2018/02/13 Javascript
axios实现文件上传并获取进度
2020/03/25 Javascript
关于小程序优化的一些建议(小结)
2020/12/10 Javascript
实例讲解Python设计模式编程之工厂方法模式的使用
2016/03/02 Python
Python如何快速实现分布式任务
2017/07/06 Python
python判断字符串是否是json格式方法分享
2017/11/07 Python
python 输出上个月的月末日期实例
2018/04/11 Python
Python3和PyCharm安装与环境配置【图文教程】
2020/02/14 Python
Python如何避免文件同名产生覆盖
2020/06/09 Python
HTML5和CSS3让网页设计提升到下一个高度
2009/08/14 HTML / CSS
GAP欧盟网上商店:GAP EU
2016/09/13 全球购物
英国领先的在线高尔夫商店:Scottsdale Golf
2019/08/26 全球购物
华为的Java面试题
2014/03/07 面试题
北京泡泡网网络有限公司.net面试题
2012/07/17 面试题
园林设计专业毕业生求职信
2014/03/23 职场文书
公司担保书范文
2014/05/21 职场文书
上课睡觉检讨书300字
2014/11/18 职场文书
2015年社会治安综合治理工作总结
2015/04/10 职场文书
力克胡哲观后感
2015/06/10 职场文书
Python爬取奶茶店数据分析哪家最好喝以及性价比
2022/09/23 Python