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 函数使用方法与函数定义方法
May 09 PHP
PHP5权威编程阅读学习笔记 附电子书下载
Jul 05 PHP
记录PHP错误日志 display_errors与log_errors的区别
Oct 09 PHP
PHP中Session引起的脚本阻塞问题解决办法
Apr 08 PHP
PHP实现绘制3D扇形统计图及图片缩放实例
Oct 01 PHP
php获取错误信息的方法
Jul 17 PHP
PHP实现Google plus的好友拖拽分组效果
Oct 21 PHP
PHP脚本自动识别验证码查询汽车违章
Dec 20 PHP
phpStudy配置多站点多域名和多端口的方法
Sep 01 PHP
[原创]PHP实现生成vcf vcard文件功能类定义与使用方法详解【附demo源码下载】
Sep 02 PHP
PHP实现的AES加密、解密封装类与用法示例
Aug 02 PHP
让你的PHP,APACHE,NGINX支持大文件上传
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
解析CI的AJAX分页 另类实现方法
2013/06/27 PHP
详解PHP中strlen和mb_strlen函数的区别
2014/03/07 PHP
jQuery图片播放8款精美插件分享
2013/02/17 Javascript
js实现点击注册按钮开始读秒倒计时的小例子
2013/05/11 Javascript
js实现兼容IE和FF的上下层的移动
2015/05/04 Javascript
JavaScript实现定时隐藏与显示图片的方法
2015/08/06 Javascript
jQuery实现form表单基于ajax无刷新提交方法详解
2015/12/08 Javascript
javascript实现滚动效果的数字时钟实例
2016/07/21 Javascript
AngularJS表格添加序号的方法
2017/03/03 Javascript
各种选择框jQuery的选中方法(实例讲解)
2017/06/27 jQuery
在Mac下彻底卸载node和npm的方法
2018/05/16 Javascript
简单了解TypeScript中如何继承 Error 类
2019/06/21 Javascript
Vue-cli项目部署到Nginx服务器的方法
2019/11/01 Javascript
详解React的回调渲染模式
2020/09/10 Javascript
swiper4实现移动端导航栏tab滑动切换
2020/10/16 Javascript
js实现扫雷源代码
2020/11/27 Javascript
[00:10]神之谴戒
2019/03/06 DOTA
[45:44]完美世界DOTA2联赛PWL S2 FTD vs PXG 第一场 11.27
2020/12/01 DOTA
Python实现字符串格式化的方法小结
2017/02/20 Python
批量获取及验证HTTP代理的Python脚本
2017/04/23 Python
Python正则表达式非贪婪、多行匹配功能示例
2017/08/08 Python
Python random模块用法解析及简单示例
2017/12/18 Python
python 监听salt job状态,并任务数据推送到redis中的方法
2019/01/14 Python
Python3.5 + sklearn利用SVM自动识别字母验证码方法示例
2019/05/10 Python
Win10系统下安装labelme及json文件批量转化方法
2019/07/30 Python
简单了解python filter、map、reduce的区别
2020/01/14 Python
HTML5的video标签的浏览器兼容性增强方案分享
2016/05/19 HTML / CSS
佳能德国网上商店:Canon德国
2017/03/18 全球购物
Speedo澳大利亚官网:全球领先游泳品牌
2018/02/04 全球购物
Oracle的内存结构(Memory structures)
2015/06/10 面试题
2014年上半年工作自我评价
2014/01/18 职场文书
ktv总经理岗位职责
2014/02/17 职场文书
优秀本科生求职推荐信
2014/02/24 职场文书
安全生产管理责任书
2014/04/16 职场文书
死亡赔偿协议书
2015/01/28 职场文书
Anaconda安装pytorch及配置PyCharm 2021环境
2021/06/04 Python