PHP使用DOM对XML解析处理操作示例


Posted in PHP onJuly 04, 2019

本文实例讲述了PHP使用DOM对XML解析处理操作。分享给大家供大家参考,具体如下:

DOM(Document Object Model):文档对象模型。核心思想是:把 xml文件看作是一个对象模型,然后通过对象的方式来操作 xml 文件。

xml本身有许多节点:
    元素节点
    文本节点
    属性节点
    注释节点
    CDATA节点
    文档节点

PHP使用DOM对XML解析处理操作示例

php对xml文档进行增删改查(CURD)操作,具体分析如下:

xml文档:class.xml

<?xml version="1.0" encoding="utf-8"?>
<class>
  <student info="美女">
    <name>小乔</name>
    <sex>女</sex>
    <age>20</age>
  </student>
  <student>
    <name>周瑜</name>
    <sex>男</sex>
    <age>25</age>
  </student>
</class>

PHP使用DOM对XML解析处理操作示例

php文件(对xml文档操作)

查询操作案例:

<?php
//1、创建一个DOMDocument对象。该对象就表示 xml文件
$xmldoc = new DOMDocument();
//2、加载xml文件(指定要解析哪个xml文件,此时dom树节点就会加载到内存中)
$xmldoc->load("class.xml");
//3、目标:获取第一个学生的名字
//3.1 第一步,读取所有的学生
/*方法getElementsByTagName:根据所给的节点名字(这里是student)查找 相应的节点,
返回 DOMNodeList类型的对象,相当于取出了所有的学生。
可以用var_dump($students)查看,并根据返回值查找手册,看其下面的属性与方法。*/
$students = $xmldoc->getElementsByTagName("student");
echo "共有 ".$students->length."个学生<br />";
//3.2 读取第一个学生
/*读取到第一个学生。返回值为DOMElement对象。
直接 echo $stu1->nodeValue;则把name,sex,age都输出。*/
$stu1 = $students->item(0);
//3.3 取出第一个学生的名字
$stu1_name = $stu1->getElementsByTagName("name");
//3.4 读取到名字
echo $stu1_name->item(0)->nodeValue;
?>

注意点:

(1)编码问题;
(2)这里只是基础演示,比较麻烦,后面用到循环和函数来操作;
(3)用var_dump(),查看变量的返回值是什么,再根据返回值到手册中查找该返回值下的属性与方法。
(4)整个顺序下来,getElementByTagName()并不需要一层一层的读,事实上可以直接读取到节点name的,而不需要先读取student(当然,如果同一个student下,有多个name,就会出问题了,这里就需要学习新的知识点xpath)。

所以上面这代码可以简单改为:

<?php
//1、创建一个DOMDocument对象。该对象就表示 xml文件
$xmldoc = new DOMDocument();
//2、加载xml文件(指定要解析哪个xml文件,此时dom树节点就会加载到内存中)
$xmldoc->load("class.xml");
//3、目标:获取第一个学生的名字
$stu = $xmldoc->getElementsByTagName("name");//直接找到节点name
$stu1 = $stu->item(0);// item(1)时,可以取到周瑜
echo $stu1->nodeValue;
?>

创建xml的各种节点

节点元素:createElement(标签名称)
文本元素:createTextNode(文本内容)
属性节点:createAttribute(属性名称)
CDATA节点:createCDATASection(文本内容)

父节点.appendChild(子节点)

dom创建xml文档案例

<?php
ini_set('display_errors',1);
//利用dom方式创建一个xml文档
/*
<dog>
  <name>xiaohuang</name>
  <color>yellow</color>
  <age></age>
</dog>
*/
$dom = new DOMDocument('1.0','utf-8');
//创建元素节点
$dog = $dom -> createElement('dog');
$name = $dom -> createElement('name');
$color = $dom -> createElement('color');
$age = $dom -> createElement('age');
//创建文本节点
$name_txt = $dom -> createTextNode('xiaohuang');
$color_txt = $dom -> createTextNode('yellow');
$age_txt = $dom -> createTextNode('2');
//追加
//元素节点追加文本节点
$name -> appendChild($name_txt);
$color -> appendChild($color_txt);
$age -> appendChild($age_txt);
//元素节点追加元素节点
$dog -> appendChild($name);
$dog -> appendChild($color);
$dog -> appendChild($age);
//最外面的根节点需要给dom节点追加
$dom -> appendChild($dog);
//方法(1)输出xml信息到浏览器
header("content-type:text/xml;charset=utf-8");
echo $dom -> saveXML();//信息直接输出到浏览器中
//方法(2)输出xml信息到指定文件
$dom -> formatOutput = true;
$dom -> save("./file_xml.xml");

结果为

PHP使用DOM对XML解析处理操作示例

创建属性节点

<?php
ini_set('display_errors',1);
//利用dom方式创建一个xml文档
/*
<dog>
  <name weight="50" height="90">xiaohuang</name>
  <color>yellow</color>
  <age></age>
</dog>
*/
$dom = new DOMDocument('1.0','utf-8');
//创建元素节点
$dog = $dom -> createElement('dog');
$name = $dom -> createElement('name');
$color = $dom -> createElement('color');
$age = $dom -> createElement('age');
//创建文本节点
$name_txt = $dom -> createTextNode('xiaohuang');
$color_txt = $dom -> createTextNode('yellow');
$age_txt = $dom -> createTextNode('2');
//追加
//元素节点追加文本节点
$name -> appendChild($name_txt);
$color -> appendChild($color_txt);
$age -> appendChild($age_txt);
//元素节点追加元素节点
$dog -> appendChild($name);
$dog -> appendChild($color);
$dog -> appendChild($age);
//创建属性节点方法(1),给name节点创建weight属性节点
$weight_txt = $dom -> createTextNode('50');
$weight = $dom -> createAttribute('weight');
$weight -> appendChild($weight_txt);//属性节点追加自己的文本节点
$name -> appendChild($weight);//属性节点被追加到对应的元素节点中
//创建属性节点方法(2),给name节点创建height属性节点
$name -> setAttribute('height',90);
//最外面的根节点需要给dom节点追加
$dom -> appendChild($dog);
//方法(1)输出xml信息到浏览器
header("content-type:text/xml;charset=utf-8");
echo $dom -> saveXML();//信息直接输出到浏览器中
//方法(2)输出xml信息到指定文件
$dom -> formatOutput = true;
$dom -> save("./file_xml.xml");

PHP使用DOM对XML解析处理操作示例

PHP 相关文章推荐
无数据库的详细域名查询程序PHP版(2)
Oct 09 PHP
在任意字符集下正常显示网页的方法二(续)
Apr 01 PHP
php存储过程调用实例代码
Feb 03 PHP
浅析Mysql 数据回滚错误的解决方法
Aug 05 PHP
PHP比你想象的好得多
Nov 27 PHP
PHP使用memcache缓存技术提高响应速度的方法
Dec 26 PHP
php递归删除目录与文件的方法
Jan 30 PHP
PHP Opcache安装和配置方法介绍
May 28 PHP
PHP获取网站中各文章的第一张图片的代码示例
May 20 PHP
PHP基于PDO实现的SQLite操作类【包含增删改查及事务等操作】
Jun 21 PHP
PHP使用微信开发模式实现搜索已发送图文及匹配关键字回复的方法
Sep 13 PHP
laravel-admin 中列表筛选方法
Oct 03 PHP
PHP创建XML接口示例
Jul 04 #PHP
ThinkPHP框架结合Ajax实现用户名校验功能示例
Jul 03 #PHP
PHP实现关键字搜索后描红功能示例
Jul 03 #PHP
Smarty模板类内部原理实例分析
Jul 03 #PHP
Referer原理与图片防盗链实现方法详解
Jul 03 #PHP
thinkphp5框架调用其它控制器方法 实现自定义跳转界面功能示例
Jul 03 #PHP
Centos7 Yum安装PHP7.2流程教程详解
Jul 02 #PHP
You might like
PHP自带ZIP压缩、解压缩类ZipArchiv使用指南
2015/03/03 PHP
Smarty中的注释和截断功能介绍
2015/04/09 PHP
PHP实现路由映射到指定控制器
2016/08/13 PHP
什么是JavaScript
2009/08/13 Javascript
JavaScript 高效运行代码分析
2010/03/18 Javascript
Javascript 中的 call 和 apply使用介绍
2012/02/22 Javascript
javascript的parseFloat()方法精度问题探讨
2013/11/26 Javascript
jQuery $.extend()用法总结
2014/06/15 Javascript
Jquery技巧(必须掌握)
2016/03/16 Javascript
jQuery实现选项联动轮播效果【附实例】
2016/04/19 Javascript
Javascript 实现简单计算器实例代码
2016/10/23 Javascript
jQuery+json实现动态创建复杂表格table的方法
2016/10/25 Javascript
Ajax与服务器(JSON)通信实例代码
2016/11/05 Javascript
使用javaScript实现鼠标拖拽事件
2020/04/03 Javascript
微信小程序bindinput与bindsubmit的区别实例分析
2019/04/17 Javascript
微信小程序动态添加view组件的实例代码
2019/05/23 Javascript
layui的面包屑或者表单不显示的解决方法
2019/09/05 Javascript
[01:00]选手抵达华西村 整装待发备战2016国际邀请赛中国区预选赛
2016/06/25 DOTA
Python实现从订阅源下载图片的方法
2015/03/11 Python
python操作ssh实现服务器日志下载的方法
2015/06/03 Python
Python 使用PIL中的resize进行缩放的实例讲解
2018/08/03 Python
Opencv-Python图像透视变换cv2.warpPerspective的示例
2019/04/11 Python
pyinstaller打包成无控制台程序时运行出错(与popen冲突的解决方法)
2020/04/15 Python
拿来就用!Python批量合并PDF的示例代码
2020/08/10 Python
Python爬取数据并实现可视化代码解析
2020/08/12 Python
python的链表基础知识点
2020/09/13 Python
泰国第一的化妆品网站:Konvy
2018/02/25 全球购物
墨西哥巴士车票在线购买:ClickBus
2018/03/27 全球购物
编辑个人求职信范文
2013/09/21 职场文书
优秀中专生推荐信
2013/11/17 职场文书
小学校长先进事迹材料
2014/05/13 职场文书
2015年事业单位办公室文员工作总结
2015/04/24 职场文书
2015年幼儿园中班工作总结
2015/04/25 职场文书
幼儿园毕业典礼家长致辞
2015/07/29 职场文书
python中print格式化输出的问题
2021/04/16 Python
OpenCV-Python直方图均衡化实现图像去雾
2021/06/07 Python