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
使用Limit参数优化MySQL查询的方法
Nov 12 PHP
PHP入门学习笔记之一
Oct 12 PHP
php批量上传的实现代码
Jun 09 PHP
ThinkPHP处理Ajax返回的方法
Nov 22 PHP
WordPress导航菜单的滚动和淡入淡出效果的实现要点
Dec 14 PHP
php下载文件,添加响应头的简单实例
Sep 22 PHP
PHP基于SMTP协议实现邮件发送实例代码
Apr 27 PHP
thinkPHP+phpexcel实现excel报表输出功能示例
Jun 06 PHP
CakePHP框架Model关联对象用法分析
Aug 04 PHP
Yii框架数据库查询、增加、删除操作示例
Oct 14 PHP
Laravel框架源码解析之入口文件原理分析
May 14 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 CURL模拟GET及POST函数代码
2010/04/25 PHP
单点登录 Ucenter示例分析
2013/10/29 PHP
php中文字符串截取多种方法汇总
2016/10/06 PHP
JQUERY 浏览器判断实现函数
2009/08/20 Javascript
jQuery ajax cache缓存问题
2010/07/01 Javascript
js改变img标签的src属性在IE下没反应的解决方法
2013/07/23 Javascript
Jquery.addClass始终无效原因分析
2013/09/08 Javascript
javascript中Number对象的toString()方法分析
2014/12/20 Javascript
AngularJS 使用$sce控制代码安全检查
2016/01/05 Javascript
JavaScript电子时钟倒计时
2016/01/09 Javascript
正则表达式,替换所有HTML标签的简单实例
2016/11/28 Javascript
利用JS实现简单的瀑布流加载图片效果
2017/04/22 Javascript
js canvas实现红包照片效果
2018/08/21 Javascript
详解vue2.6插槽更新v-slot用法总结
2019/03/09 Javascript
vue2.0自定义指令示例代码详解
2019/04/25 Javascript
vuex页面刷新导致数据丢失的解决方案
2020/12/10 Vue.js
[01:28]一分钟告诉你DOTA2 TI9不朽宝藏Ⅱ中有什么!
2019/07/09 DOTA
Python 爬虫的工具列表大全
2016/01/31 Python
简介Python的collections模块中defaultdict类型的用法
2016/07/07 Python
Python遍历文件夹和读写文件的实现代码
2016/08/28 Python
python构建深度神经网络(DNN)
2018/03/10 Python
python放大图片和画方格实现算法
2018/03/30 Python
详解python selenium 爬取网易云音乐歌单名
2019/03/28 Python
解决Python3 抓取微信账单信息问题
2019/07/19 Python
Python 爬虫实现增加播客访问量的方法实现
2019/10/31 Python
Python编程快速上手——strip()函数的正则表达式实现方法分析
2020/02/29 Python
如何理解Python中包的引入
2020/05/29 Python
canvas 阴影和图形变换的示例代码
2018/01/02 HTML / CSS
HTML里显示pdf、word、xls、ppt的方法示例
2020/04/14 HTML / CSS
李维斯德国官方网上商店:Levi’s德国
2016/09/10 全球购物
7 For All Mankind官网:美国加州洛杉矶的高级牛仔服装品牌
2018/12/20 全球购物
高中生职业规划范文
2014/03/09 职场文书
培根随笔读书笔记
2015/07/01 职场文书
《确定位置》教学反思
2016/02/18 职场文书
Java Spring 控制反转(IOC)容器详解
2021/10/05 Java/Android
Java 中的 Lambda List 转 Map 的多种方法详解
2022/07/07 Java/Android