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中文本操作的类
Mar 17 PHP
php 归并排序 数组交集
May 10 PHP
PHP排序算法的复习和总结
Feb 15 PHP
深入PHP nl2br()格式化输出的详解
Jun 05 PHP
PHP中将ip地址转成十进制数的两种实用方法
Aug 15 PHP
PHP set_error_handler()函数使用详解(示例)
Nov 12 PHP
Yii2使用小技巧之通过 Composer 添加 FontAwesome 字体资源
Jun 22 PHP
Laravel 4.2 中队列服务(queue)使用感受
Oct 30 PHP
php模板引擎技术简单实现
Mar 15 PHP
CodeIgniter常用知识点小结
May 26 PHP
PHPCMS手机站伪静态设置详细教程
Feb 06 PHP
PHP Beanstalkd消息队列的安装与使用方法实例详解
Feb 21 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发送get、post请求的6种方法简明总结
2014/07/08 PHP
php-beanstalkd消息队列类实例分享
2017/07/19 PHP
关于 Laravel Redis 多个进程同时取队列问题详解
2017/12/25 PHP
Ubuntu中支持PHP5与PHP7双版本的简单实现
2018/08/19 PHP
PHP 范围解析操作符(::)用法分析【访问静态成员和类常量】
2020/04/14 PHP
js去除空格的12种实用方法
2013/11/08 Javascript
Node.js文件操作详解
2014/08/16 Javascript
javascript元素动态创建实现方法
2015/05/13 Javascript
五种js判断是否为整数类型方式
2015/12/03 Javascript
JavaScript事件用法浅析
2016/10/31 Javascript
打造通用的匀速运动框架(实例讲解)
2017/10/17 Javascript
深入理解Node module模块
2018/03/26 Javascript
浅析Proxy可以优化vue的数据监听机制问题及实现思路
2018/11/29 Javascript
原生JS 实现的input输入时表格过滤操作示例
2019/08/03 Javascript
Node.js系列之连接DB的方法(3)
2019/08/30 Javascript
微信小程序表单验证WxValidate的使用
2019/11/27 Javascript
如何修改Vue打包后文件的接口地址配置的方法
2020/04/22 Javascript
原生JS实现京东查看商品点击放大
2020/12/21 Javascript
[58:35]OG vs EG 2019国际邀请赛淘汰赛 胜者组 BO3 第二场 8.22
2019/09/05 DOTA
Python使用scipy模块实现一维卷积运算示例
2019/09/05 Python
Python 生成器,迭代,yield关键字,send()传参给yield语句操作示例
2019/10/12 Python
使用pyqt 实现重复打开多个相同界面
2019/12/13 Python
用openCV和Python 实现图片对比,并标识出不同点的方式
2019/12/19 Python
numba提升python运行速度的实例方法
2021/01/25 Python
python3.9.1环境安装的方法(图文)
2021/02/02 Python
20行代码教你用python给证件照换底色的方法示例
2021/02/05 Python
英国领先的隐形眼镜在线供应商:Lenstore.co.uk
2019/11/24 全球购物
外贸专业求职信
2014/03/09 职场文书
先进员工获奖感言
2014/08/14 职场文书
违纪开除通知书
2015/04/25 职场文书
辩论赛新闻稿
2015/07/17 职场文书
2015元旦感言
2015/12/09 职场文书
2016年度创先争优活动总结
2016/04/05 职场文书
利用Nginx代理如何解决前端跨域问题详析
2021/04/02 Servers
Linux7.6二进制安装Mysql8.0.27详细操作步骤
2021/11/27 MySQL
windows10 家庭版下FTP服务器搭建教程
2022/08/05 Servers