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&amp;mysql(一)
Oct 09 PHP
文件系统基本操作类
Nov 23 PHP
CI框架源码阅读,系统常量文件constants.php的配置
Feb 28 PHP
thinkphp 多表 事务详解
Jun 17 PHP
js限制checkbox勾选的个数以及php获取多个checkbbox的方法深入解析
Jul 18 PHP
探寻PHP脚本不报错的原因
Jun 12 PHP
PHP打开和关闭文件操作函数总结
Nov 18 PHP
php使用PDO操作MySQL数据库实例
Dec 30 PHP
smarty内置函数foreach用法实例
Jan 22 PHP
浅谈PHP接收POST数据方式
Jun 05 PHP
PHP中文字符串截断无乱码解决方法
Oct 10 PHP
详谈php ip2long 出现负数的原因及解决方法
Apr 05 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 日期和时间的处理-郑阿奇(续)
2011/07/04 PHP
PHP goto语句简介和使用实例
2014/03/11 PHP
Symfony的安装和配置方法
2016/03/17 PHP
PHP递归实现层级树状展开
2016/04/01 PHP
php写app接口并返回json数据的实例(分享)
2017/05/20 PHP
Javascript attachEvent传递参数的办法
2009/12/14 Javascript
Javascript模块化编程(一)AMD规范(规范使用模块)
2013/01/17 Javascript
jQuery获取选中内容及设置元素属性的方法
2014/07/09 Javascript
Javascript调用函数方法的几种方式介绍
2015/03/20 Javascript
你有必要知道的25个JavaScript面试题
2015/12/29 Javascript
Bootstrap安装环境配置教程分享
2016/05/27 Javascript
基于JS代码实现当鼠标悬停表格上显示这一格的全部内容
2016/06/12 Javascript
AngularJS中的JSONP实例解析
2016/12/01 Javascript
JS实现点击表头表格自动排序(含数字、字符串、日期)
2017/01/22 Javascript
vue.js利用Object.defineProperty实现双向绑定
2017/03/09 Javascript
详解如何使用webpack打包多页jquery项目
2019/02/01 jQuery
[45:46]2014 DOTA2国际邀请赛中国区预选赛5.21 HGT VS DT
2014/05/23 DOTA
python中lambda函数 list comprehension 和 zip函数使用指南
2014/09/28 Python
python中os操作文件及文件路径实例汇总
2015/01/15 Python
pycharm设置注释颜色的方法
2018/05/23 Python
python 对给定可迭代集合统计出现频率,并排序的方法
2018/10/18 Python
在Mac上删除自己安装的Python方法
2018/10/29 Python
PIL图像处理模块paste方法简单使用详解
2019/07/17 Python
Python 迭代,for...in遍历,迭代原理与应用示例
2019/10/12 Python
经济实惠的名牌太阳镜和眼镜:Privé Revaux
2021/02/07 全球购物
编写一个 C 函数,该函数在一个字符串中找到可能的最长的子字符串,且该字符串是由同一字符组成的
2015/07/23 面试题
自动化专业毕业生自荐信
2013/11/01 职场文书
职工趣味运动会方案
2014/02/10 职场文书
大学毕业生求职自荐信
2014/02/20 职场文书
会计学毕业生求职信
2014/06/25 职场文书
高中国旗下的演讲稿
2014/08/28 职场文书
传承焦裕禄精神思想汇报2014
2014/09/10 职场文书
离婚律师函范本
2015/05/27 职场文书
导游词之太行山青龙峡
2020/01/14 职场文书
基于python实现银行管理系统
2021/04/20 Python
VUE之图片Base64编码使用ElementUI组件上传
2022/04/09 Vue.js