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无限分类的类
Jan 02 PHP
PHP中用header图片地址 简单隐藏图片源地址
Apr 09 PHP
openflashchart 2.0 简单案例php版
May 21 PHP
php中使用addslashes函数报错问题的解决方法
Feb 06 PHP
ThinkPHP模板判断输出Present标签用法详解
Jun 30 PHP
PHP弹出对话框技巧详细解读
Sep 26 PHP
php单例模式的简单实现方法
Jun 10 PHP
PHP自定义函数获取URL中一级域名的方法
Aug 23 PHP
laravel项目利用twemproxy部署redis集群的完整步骤
May 11 PHP
PHP html_entity_decode()函数讲解
Feb 25 PHP
PHP设计模式之策略模式原理与用法实例分析
Apr 04 PHP
php解析非标准json、非规范json的方式实例
Dec 10 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调用mysql数据 dbclass类
2011/05/07 PHP
PHP PDO fetch 模式各种参数的输出结果一览
2015/01/07 PHP
PHP二维数组去重算法
2016/12/17 PHP
详解PHP中的序列化、反序列化操作
2017/03/21 PHP
PHP面向对象中new self()与 new static()的区别浅析
2017/08/17 PHP
PHP ADODB生成下拉列表框功能示例
2018/05/29 PHP
Laravel框架中队列和工作(Queues、Jobs)操作实例详解
2020/04/06 PHP
javascript 写的一个简单的timer
2009/07/30 Javascript
js 表单提交后按钮变灰的实例代码
2013/08/16 Javascript
Ajax同步与异步传输的示例代码
2013/11/21 Javascript
使用js完成节点的增删改复制等的操作
2014/01/02 Javascript
Javascript WebSocket使用实例介绍(简明入门教程)
2014/04/16 Javascript
jquery css 设置table的奇偶行背景色示例
2014/06/03 Javascript
深入理解javascript构造函数和原型对象
2014/09/23 Javascript
JavaScript中使用webuploader实现上传视频功能(demo)
2017/04/10 Javascript
jquery加载单文件vue组件的方法
2017/06/20 jQuery
vue中如何创建多个ueditor实例教程
2017/11/14 Javascript
axios简单实现小程序延时loading指示
2018/07/30 Javascript
vue 自定义指令自动获取文本框焦点的方法
2018/08/25 Javascript
JS实现li标签的删除
2019/04/12 Javascript
vue动态子组件的两种实现方式
2019/09/01 Javascript
echarts实现获取datazoom的起始值(包括x轴和y轴)
2020/07/20 Javascript
[04:02]DOTA2上海特锦赛小组赛第二日recap精彩回顾
2016/02/28 DOTA
Python使用稀疏矩阵节省内存实例
2014/06/27 Python
python入门:这篇文章带你直接学会python
2018/09/14 Python
pycharm 使用anaconda为默认环境的操作
2021/02/05 Python
如何为DataGridView添加一个定制的Column Type
2014/01/21 面试题
护士自荐信
2013/10/25 职场文书
应征英语教师求职信
2013/11/27 职场文书
怎么写自荐书范文
2014/02/12 职场文书
忠诚教育心得体会
2014/09/03 职场文书
2014年党建工作汇报材料
2014/10/27 职场文书
2014幼儿园卫生保健工作总结
2014/12/05 职场文书
出国留学导师推荐信
2015/03/26 职场文书
政府会议通知范文
2015/04/15 职场文书
付款证明格式范文
2015/06/19 职场文书