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发送邮件类代码附详细说明
Jul 10 PHP
php 文件状态缓存带来的问题
Dec 14 PHP
PHP 5.3 下载时 VC9、VC6、Thread Safe、Non Thread Safe的区别分析
Mar 28 PHP
手把手教你打印出PDF(关于fpdf的简单应用)
Jun 25 PHP
详解PHP中strlen和mb_strlen函数的区别
Mar 07 PHP
php使用memcoder将视频转成mp4格式的方法
Mar 12 PHP
腾讯CMEM的PHP扩展编译安装方法
Sep 25 PHP
yii2中使用Active Record模式的方法
Jan 09 PHP
php数组分页实现方法
Apr 30 PHP
一段实用的php验证码函数
May 19 PHP
php外部执行命令函数用法小结
Oct 11 PHP
PHP 进度条函数的简单实例
Sep 19 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语言流程控制中的主动与被动
2012/11/05 PHP
php生成数组的使用示例 php全组合算法
2014/01/16 PHP
PHP封装的page分页类定义与用法完整示例
2018/12/24 PHP
给网站上的广告“加速”显示的方法
2007/04/08 Javascript
IE6、IE7中获取Button元素的值的bug说明
2011/08/28 Javascript
JS实现部分HTML固定页面顶部随屏滚动效果
2015/12/24 Javascript
js操作cookie保存浏览记录的方法
2015/12/25 Javascript
jQuery ajax全局函数处理session过期后的ajax跳转问题
2016/06/03 Javascript
Vue 2.0+Vue-router构建一个简单的单页应用(附源码)
2017/03/14 Javascript
Javascript实现从小到大的数组转换成二叉搜索树
2017/06/13 Javascript
原生JS+Canvas实现五子棋游戏实例
2017/06/19 Javascript
angularjs实现table增加tr的方法
2018/02/27 Javascript
JavaScript实现构造json数组的方法分析
2018/08/17 Javascript
JS获取并处理php数组的方法实例分析
2018/09/04 Javascript
在React项目中使用Eslint代码检查工具及常见问题
2018/10/10 Javascript
微信小程序实现轨迹回放的示例代码
2019/12/13 Javascript
JS document对象简单用法完整示例
2020/01/14 Javascript
谈谈我在vue-cli3中用预渲染遇到的坑
2020/04/22 Javascript
JS使用for in有序获取对象数据
2020/05/19 Javascript
在vue中实现echarts随窗体变化
2020/07/27 Javascript
vue实现动态表格提交参数动态生成控件的操作
2020/11/09 Javascript
[01:06:19]DOTA2-DPC中国联赛定级赛 LBZS vs SAG BO3第二场 1月8日
2021/03/11 DOTA
进一步探究Python的装饰器的运用
2015/05/05 Python
详解使用pymysql在python中对mysql的增删改查操作(综合)
2017/01/18 Python
基于Python log 的正确打开方式
2018/04/28 Python
Python使用pyshp库读取shapefile信息的方法
2018/12/29 Python
Python 分享10个PyCharm技巧
2019/07/13 Python
在pytorch中对非叶节点的变量计算梯度实例
2020/01/10 Python
工商管理系学生的自我评价分享
2013/11/29 职场文书
信息员培训方案
2014/06/12 职场文书
文员求职信
2014/07/15 职场文书
机关干部三严三实心得体会
2014/10/13 职场文书
2015年试用期工作总结
2014/12/12 职场文书
庆祝教师节活动总结
2015/03/23 职场文书
离婚起诉书范本
2015/05/18 职场文书
python标准库ElementTree处理xml
2022/05/20 Python