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 5.3.1 安装包 VC9 VC6不同版本的区别是什么
Jul 04 PHP
php高级编程-函数-郑阿奇
Jul 04 PHP
PHP自动识别字符集并完成转码详解
Aug 02 PHP
php+ajax实时输入自动搜索匹配的方法
Dec 26 PHP
Yii2中使用join、joinwith多表关联查询
Jun 30 PHP
PHP获取当前文件的父目录方法汇总
Jul 21 PHP
PHP使用GD库输出汉字的方法【测试可用】
Nov 10 PHP
Yii实现复选框批量操作实例代码
Mar 15 PHP
PHP编程获取图片的主色调的方法【基于Imagick扩展】
Aug 02 PHP
Laravel中日期时间处理包Carbon的简单使用
Sep 21 PHP
PHP的mysqli_sqlstate()函数讲解
Jan 23 PHP
解决laravel资源加载路径设置的问题
Oct 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
mysql查找删除重复数据并只保留一条实例详解
2016/09/24 PHP
Docker配置PHP开发环境教程
2016/12/21 PHP
PHP面向对象程序设计之对象的遍历操作示例
2019/06/12 PHP
JS+CSS实现一个气泡提示框
2013/08/18 Javascript
js动态添加删除,后台取数据(示例代码)
2013/11/25 Javascript
常规表格多表头查询示例
2014/02/21 Javascript
原生js实现回复评论功能
2017/01/18 Javascript
AngularJS实现进度条功能示例
2017/07/05 Javascript
JavaScript中的高级函数
2018/01/04 Javascript
AngularJS实现与后台服务器进行交互的示例讲解
2018/08/13 Javascript
vue interceptor 使用教程实例详解
2018/09/13 Javascript
vue-cli的工程模板与构建工具详解
2018/09/27 Javascript
Vue使用zTree插件封装树组件操作示例
2019/04/25 Javascript
Angular2实现的秒表及改良版示例
2019/05/10 Javascript
解决layui的input独占一行的问题
2019/09/10 Javascript
使用Mixin设计模式进行Python编程的方法讲解
2016/06/21 Python
python 写入csv乱码问题解决方法
2016/10/23 Python
通过Python 接口使用OpenCV的方法
2018/04/02 Python
python爬取哈尔滨天气信息
2018/07/14 Python
对python操作kafka写入json数据的简单demo分享
2018/12/27 Python
Django中使用CORS实现跨域请求过程解析
2019/08/05 Python
python 类的继承 实例方法.静态方法.类方法的代码解析
2019/08/23 Python
使用python获取邮箱邮件的设置方法
2019/09/20 Python
python实现文件批量编码转换及注意事项
2019/10/14 Python
基于Python批量生成指定尺寸缩略图代码实例
2019/11/20 Python
jupyter 实现notebook中显示完整的行和列
2020/04/09 Python
python3.8.3安装教程及环境配置的详细教程(64-bit)
2020/11/28 Python
html5+css3气泡组件的实现
2014/11/21 HTML / CSS
阿迪达斯俄罗斯官方商城:adidas俄罗斯
2017/03/08 全球购物
化石印度尼西亚在线商店:Fossil Indonesia
2019/03/11 全球购物
俄罗斯家居用品购物网站:Евродом
2020/11/21 全球购物
党支部公开承诺书
2014/03/28 职场文书
汽修专业自荐信
2014/07/07 职场文书
法人代表证明书格式
2014/10/01 职场文书
导游词之凤凰古城
2019/10/22 职场文书
BCL经典机 SONY ICF-5900W电路分析
2022/04/24 无线电