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和MySQL保存和输出图片
Oct 09 PHP
在Windows中安装Apache2和PHP4的权威指南
Oct 09 PHP
一个简单的自动发送邮件系统(一)
Oct 09 PHP
PHP下一个非常全面获取图象信息的函数
Nov 20 PHP
PHP获取当前文件所在目录 getcwd()函数
May 13 PHP
采用ThinkPHP中F方法实现快速缓存实例
Jun 13 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(七)
Jun 23 PHP
php实现文件下载代码分享
Aug 19 PHP
Yii的CDbCriteria查询条件用法实例
Dec 04 PHP
PHP查看当前变量类型的方法
Jul 31 PHP
PHP封装的MSSql操作类完整实例
May 26 PHP
Laravel Eloquent分表方法并使用模型关联的实现
Nov 25 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
雄兵连三大错觉:凯莎没了,凉冰阵亡了,华烨觉得自己又行了
2020/04/09 国漫
php中防止恶意刷新页面的代码小结
2012/10/31 PHP
php获取excel文件数据
2017/04/21 PHP
HR vs ForZe BO3 第一场 2.13
2021/03/10 DOTA
Js 中debug方式
2010/02/07 Javascript
document.getElementById方法在Firefox与IE中的区别
2010/05/18 Javascript
JS延迟加载(setTimeout) JS最后加载
2010/07/15 Javascript
js获取元素在浏览器中的绝对位置
2010/07/24 Javascript
jquery slibings选取同级其他元素的实现代码
2013/11/15 Javascript
JavaScript获取当前页面上的指定对象示例代码
2014/02/28 Javascript
jQuery实现的Tab滑动选项卡及图片切换(多种效果)小结
2015/09/14 Javascript
jQuery插件开发汇总
2016/05/15 Javascript
图文详解JavaScript的原型对象及原型链
2016/08/02 Javascript
用Angular实时获取本地Localstorage数据,实现一个模拟后台数据登入的效果
2016/11/09 Javascript
javascript循环链表之约瑟夫环的实现方法
2017/01/16 Javascript
JavaScript满天星导航栏实现方法
2018/03/08 Javascript
用Python编写一个简单的FUSE文件系统的教程
2015/04/02 Python
python使用matplotlib绘制柱状图教程
2017/02/08 Python
python判断无向图环是否存在的示例
2019/11/22 Python
keras的ImageDataGenerator和flow()的用法说明
2020/07/03 Python
Python编写memcached启动脚本代码实例
2020/08/14 Python
Pandas DataFrame求差集的示例代码
2020/12/13 Python
html5页面结构_动力节点Java学院整理
2017/07/10 HTML / CSS
澳洲在线厨具商店:Kitchen Style
2018/05/05 全球购物
Rowdy Gentleman服装和配饰:美好时光
2019/09/24 全球购物
马来西亚在线健康商店:Medipal Malaysia
2020/04/13 全球购物
美国相机和电子产品零售商:Beach Camera
2020/11/26 全球购物
电子商务毕业生求职信
2013/11/10 职场文书
环保倡议书400字
2014/05/15 职场文书
学术诚信承诺书
2014/05/26 职场文书
2015年元旦联欢晚会活动总结
2014/11/28 职场文书
2014年度考核工作总结
2014/12/24 职场文书
建筑质检员岗位职责
2015/04/08 职场文书
2015年全国爱眼日活动方案
2015/05/05 职场文书
JavaScript与JQuery框架基础入门教程
2021/07/15 Javascript
python神经网络学习 使用Keras进行简单分类
2022/05/04 Python