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
教你如何把一篇文章按要求分段
Oct 09 PHP
基于php设计模式中工厂模式详细介绍
May 15 PHP
关于js和php对url编码的处理方法
Mar 04 PHP
destoon调用自定义模板及样式的公告栏
Jun 21 PHP
PHP_SELF,SCRIPT_NAME,REQUEST_URI区别
Dec 24 PHP
PHP生成随机数的方法实例分析
Jan 22 PHP
PHP常用的小程序代码段
Nov 14 PHP
php微信开发之自定义菜单完整流程
Oct 08 PHP
CodeIgniter框架基本增删改查操作示例
Mar 23 PHP
PHP实现通过文本文件统计页面访问量功能示例
Feb 13 PHP
PHP7 其他修改
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
GD输出汉字的函数的分析
2006/10/09 PHP
PHP中simplexml_load_string函数使用说明
2011/01/01 PHP
主流PHP框架的优缺点对比分析
2014/12/25 PHP
php实现用于删除整个目录的递归函数
2015/03/16 PHP
利用PHP fsockopen 模拟POST/GET传送数据的方法
2015/09/22 PHP
Zend Framework教程之路由功能Zend_Controller_Router详解
2016/03/07 PHP
PHP getNamespaces()函数讲解
2019/02/03 PHP
js 事件小结 表格区别
2007/08/13 Javascript
jQuery DIV弹出效果实现代码
2009/07/03 Javascript
jQuery each()小议
2010/03/18 Javascript
IE6,IE7,IE8下使用Javascript记录光标选中范围(已补全)
2011/08/28 Javascript
JQuery实现表格中相同单元格合并示例代码
2013/06/26 Javascript
javaScript对文字按照拼音排序实现代码
2013/12/27 Javascript
JSON字符串和对象之间的转换详解
2015/05/26 Javascript
Javascript点击其他任意地方隐藏关闭DIV实例
2016/06/21 Javascript
第一次接触神奇的Bootstrap表单
2016/07/27 Javascript
基于ExtJs在页面上window再调用Window的事件处理方法
2017/07/26 Javascript
Node.js Express安装与使用教程
2018/05/11 Javascript
在Vue中使用icon 字体图标的方法
2019/06/14 Javascript
vue 使用 v-model 双向绑定父子组件的值遇见的问题及解决方案
2021/03/01 Vue.js
[02:20]DOTA2亚洲邀请赛 EHOME战队出场宣传片
2015/02/07 DOTA
Python单例模式实例分析
2015/01/14 Python
flask使用session保存登录状态及拦截未登录请求代码
2018/01/19 Python
python基础学习之如何对元组各个元素进行命名详解
2018/07/12 Python
通过python的matplotlib包将Tensorflow数据进行可视化的方法
2019/01/09 Python
基于python实现学生信息管理系统
2019/11/22 Python
Python3 selenium 实现QQ群接龙自动化功能
2020/04/17 Python
如何用Python和JS实现的Web SSH工具
2021/02/23 Python
美国网上眼镜商城:Zenni Optical
2016/11/20 全球购物
澳大利亚运动鞋零售商:The Athlete’s Foot
2018/11/04 全球购物
Hawes & Curtis官网:英国经典品牌
2019/07/27 全球购物
介绍一下ICMP(Internet Control Message Protocol)Internet控制信息协议
2016/11/26 面试题
优秀员工个人的自我评价
2013/11/29 职场文书
培训自我鉴定
2014/01/31 职场文书
医院护士见习期自我鉴定
2014/04/10 职场文书
中职毕业生自我鉴定
2014/09/13 职场文书