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操作xml代码
Jun 17 PHP
PHP中的string类型使用说明
Jul 27 PHP
discuz程序的PHP加密函数原理分析
Aug 05 PHP
php中删除字符串中最先出现某个字符的实现代码
Feb 03 PHP
简单实现限定phpmyadmin访问ip的方法
Mar 05 PHP
php用header函数实现301跳转代码实例
Nov 25 PHP
浅谈Eclipse PDT调试PHP程序
Jun 09 PHP
PHP封装的字符串加密解密函数
Dec 18 PHP
php使用Header函数,PHP_AUTH_PW和PHP_AUTH_USER做用户验证
May 04 PHP
thinkphp5.1框架实现格式化mysql时间戳为日期的方式小结
Oct 10 PHP
PHP call_user_func和call_user_func_array函数的简单理解与应用分析
Nov 25 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
非洲第一个咖啡超凡杯大赛承办国—卢旺达的咖啡怎么样
2021/03/03 咖啡文化
php 记录进行累加并显示总时长为秒的结果
2011/11/04 PHP
PHP开发者常犯的10个MySQL错误更正剖析
2012/01/30 PHP
php实现图片缩略图的方法
2016/03/29 PHP
JavaScript实现为指定对象添加多个事件处理程序的方法
2015/04/17 Javascript
jQuery支持添加事件的日历特效代码分享(3种样式)
2015/08/24 Javascript
jQuery模拟360浏览器切屏效果幻灯片(附demo源码下载)
2016/01/29 Javascript
基于Echarts 3.19 制作常用的图形(非静态)
2016/05/19 Javascript
JS对HTML表格进行增删改操作
2016/08/22 Javascript
JS实现根据用户输入分钟进行倒计时功能
2016/11/14 Javascript
基于bootstrap实现bootstrap中文网巨幕效果
2017/05/02 Javascript
关于js中的鼠标事件总结
2017/07/11 Javascript
JQuery和html+css实现带小圆点和左右按钮的轮播图实例
2017/07/22 jQuery
Vue.js弹出模态框组件开发的示例代码
2017/07/26 Javascript
JavaScript中关于class的调用方法
2017/11/28 Javascript
ionic2中使用自动生成器的方法
2018/03/04 Javascript
浅谈angularJs函数的使用方法(大小写转换,拷贝,扩充对象)
2018/10/08 Javascript
实现Vue的markdown文档可以在线运行的方法示例
2018/12/11 Javascript
mpvue微信小程序的接口请求fly全局拦截代码实例
2019/11/13 Javascript
vue实现随机验证码功能(完整代码)
2019/12/10 Javascript
Vue实现手机计算器
2020/08/17 Javascript
[53:10]Secret vs Pain 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
windows 10下安装搭建django1.10.3和Apache2.4的方法
2017/04/05 Python
python通过ffmgep从视频中抽帧的方法
2018/12/05 Python
Python Opencv中用compareHist函数进行直方图比较对比图片
2020/04/07 Python
Python Tornado实现WEB服务器Socket服务器共存并实现交互的方法
2020/05/26 Python
详解基于python的全局与局部序列比对的实现(DNA)
2020/10/07 Python
python实现图片,视频人脸识别(opencv版)
2020/11/18 Python
Python WebSocket长连接心跳与短连接的示例
2020/11/24 Python
五款漂亮的纯CSS3动画按钮的实例教程
2014/11/21 HTML / CSS
办公室主任先进事迹
2014/01/18 职场文书
阅兵口号
2014/06/19 职场文书
2014和解协议书范文
2014/09/15 职场文书
2021年pycharm的最新安装教程及基本使用图文详解
2021/04/03 Python
使用python向MongoDB插入时间字段的操作
2021/05/18 Python
uniapp 微信小程序 自定义tabBar 导航
2022/04/22 Javascript