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简单命令代码集锦
Sep 24 PHP
PHP获取网卡地址的代码
Apr 09 PHP
用Zend Encode编写开发PHP程序
Feb 21 PHP
初次接触php抽象工厂模式(Elgg)
Mar 21 PHP
php基础教程 php内置函数实例教程
Aug 21 PHP
php获取文件夹路径内的图片以及分页显示示例
Mar 11 PHP
PHP模板引擎smarty详细介绍
May 26 PHP
PHP实现恶意DDOS攻击避免带宽占用问题方法
May 27 PHP
PHP解压ZIP文件到指定文件夹的方法
Nov 17 PHP
phpStudy中升级MySQL版本到5.7.17的方法步骤
Aug 03 PHP
safari下载文件自动加了html后缀问题
Nov 09 PHP
Yii2框架视图(View)操作及Layout的使用方法分析
May 27 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与浏览器缓存的分析
2013/06/03 PHP
php分页示例分享
2014/04/30 PHP
PHP实现抓取Google IP并自动修改hosts文件
2015/02/12 PHP
PHP实现将视频转成MP4并获取视频预览图的方法
2015/03/12 PHP
PHP命令空间namespace及use的用法小结
2017/11/27 PHP
javascript计时器事件使用详解
2014/01/07 Javascript
AngularJS在IE8的不支持的解决方法
2016/05/13 Javascript
nodeJs内存泄漏问题详解
2016/09/05 NodeJs
AngularJS 中的Promise --- $q服务详解
2016/09/14 Javascript
给easyui datebox扩展一个清空的实例
2016/11/09 Javascript
详解浏览器渲染页面过程
2017/02/09 Javascript
解决npm管理员身份install时出现权限的问题
2018/03/16 Javascript
官方推荐react-navigation的具体使用详解
2018/05/08 Javascript
Vue监听一个数组id是否与另一个数组id相同的方法
2018/09/26 Javascript
微信小程序封装分享与分销功能过程解析
2019/08/13 Javascript
javascript 高级语法之继承的基本使用方法示例
2019/11/11 Javascript
vue-cli3.0实现一个多页面应用的历奇经历记录总结
2020/03/16 Javascript
jQuery实现简单全选框
2020/09/13 jQuery
小程序实现左滑删除的效果的实例代码
2020/10/19 Javascript
Python中多线程的创建及基本调用方法
2016/07/08 Python
Pycharm代码无法复制,无法选中删除,无法编辑的解决方法
2018/10/22 Python
对python for 文件指定行读写操作详解
2018/12/29 Python
Django打印出在数据库中执行的语句问题
2019/07/25 Python
django做form表单的数据验证过程详解
2019/07/26 Python
opencv 图像轮廓的实现示例
2020/07/08 Python
Puma印度官网:德国运动品牌
2019/10/06 全球购物
校长就职演讲稿
2014/01/06 职场文书
趣味游戏活动方案
2014/02/07 职场文书
学徒工职责
2014/03/06 职场文书
征婚广告词
2014/03/17 职场文书
拓展训练激励口号
2014/06/17 职场文书
高中教师先进事迹材料
2014/08/22 职场文书
离婚协议书怎样才有法律效力
2014/10/10 职场文书
12.4全国法制宣传日活动总结
2014/11/01 职场文书
关于运动会的宣传稿
2015/07/23 职场文书
铁头也玩根德 YachtBoy YB-230......
2022/04/05 无线电