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中上传大体积文件时需要的设置
Oct 09 PHP
php面向对象全攻略 (十二) 抽象方法和抽象类
Sep 30 PHP
zend optimizer在wamp的基础上安装图文教程
Oct 26 PHP
php教程之魔术方法的使用示例(php魔术函数)
Feb 12 PHP
ThinkPHP3.1新特性之动态设置自动完成及自动验证示例代码
Jun 23 PHP
编译PHP报错configure error Cannot find libmysqlclient under usr的解决方法
Jun 27 PHP
修改destoon会员公司的伪静态中的com目录的方法
Aug 21 PHP
php使用parse_str实现查询字符串解析到变量中的方法
Feb 17 PHP
php分页查询的简单实现代码
Mar 14 PHP
CI框架(CodeIgniter)公共模型类定义与用法示例
Aug 10 PHP
php+mysql+ajax 局部刷新点赞/取消点赞功能(每个账号只点赞一次)
Jul 24 PHP
PHP常量DIRECTORY_SEPARATOR原理及用法解析
Nov 10 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和Shell写Hadoop的MapReduce程序
2014/04/15 PHP
PHP抓取淘宝商品的用户晒单评论+图片+搜索商品列表实例
2016/04/14 PHP
js计数器代码
2006/11/04 Javascript
Javascript操作cookie的函数代码
2012/10/03 Javascript
模拟一个类似百度google的模糊搜索下拉列表
2014/04/15 Javascript
JS实现文字向下滚动完整实例
2015/02/06 Javascript
Nodejs学习笔记之入门篇
2015/04/16 NodeJs
js闭包所用的场合以及优缺点分析
2015/06/22 Javascript
快速掌握Node.js之Window下配置NodeJs环境
2016/03/21 NodeJs
JavaScript数组方法总结分析
2016/05/06 Javascript
jquery实现图片切换代码
2016/10/13 Javascript
详解Jquery的事件操作和文档操作
2016/12/19 Javascript
vue父组件通过props如何向子组件传递方法详解
2017/08/16 Javascript
React/Redux应用使用Async/Await的方法
2017/11/16 Javascript
菊花转动的jquery加载动画效果
2018/08/19 jQuery
小程序数据通信方法大全(推荐)
2019/04/15 Javascript
Python搜索引擎实现原理和方法
2017/11/27 Python
python 处理dataframe中的时间字段方法
2018/04/10 Python
啥是佩奇?使用Python自动绘画小猪佩奇的代码实例
2019/02/20 Python
Django框架模板语言实例小结【变量,标签,过滤器,继承,html转义】
2019/05/23 Python
使用 python pyautogui实现鼠标键盘控制功能
2019/08/04 Python
python提取xml里面的链接源码详解
2019/10/15 Python
Python API len函数操作过程解析
2020/03/05 Python
python 通过 pybind11 使用Eigen加速代码的步骤
2020/12/07 Python
HTML5中的新元素介绍
2008/10/17 HTML / CSS
HTML5 SEO优化的一些建议
2020/08/27 HTML / CSS
世界上最好的帽子:Tilley
2016/11/27 全球购物
英国家喻户晓的家居商店:The Range
2019/03/25 全球购物
日期和时间问题
2015/01/04 面试题
销售会计工作职责
2013/12/02 职场文书
班级活动策划书
2014/02/06 职场文书
升职自荐信范文
2015/03/27 职场文书
2015年党风廉政建设工作总结
2015/04/09 职场文书
python numpy中multiply与*及matul 的区别说明
2021/05/26 Python
Vue项目打包、合并及压缩优化网页响应速度
2021/07/07 Vue.js
Java结构型设计模式之组合模式详解
2022/09/23 Java/Android