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 相关文章推荐
JS与PHP向函数传递可变参数的区别实例代码
May 18 PHP
深入了解PHP类Class的概念
Jun 14 PHP
PHP中将ip地址转成十进制数的两种实用方法
Aug 15 PHP
在PHP中使用X-SendFile头让文件下载更快
Jun 01 PHP
PHP冒泡算法详解(递归实现)
Nov 10 PHP
PHP的Yii框架的常用日志操作总结
Dec 08 PHP
Redis使用Eval多个键值自增的操作实例
Nov 04 PHP
PHP PDOStatement::getColumnMeta讲解
Feb 01 PHP
php封装的pdo数据库操作工具类与用法示例
May 08 PHP
PHP面向对象程序设计子类扩展父类(子类重新载入父类)操作详解
Jun 14 PHP
php框架知识点的整理和补充
Mar 01 PHP
PHP判断是否是json字符串
Apr 01 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中如何使对象可以像数组一样进行foreach循环
2013/08/09 PHP
php获取开始与结束日期之间所有日期的方法
2016/11/29 PHP
Thinkphp3.2简单解决多文件上传只上传一张的问题
2017/09/26 PHP
Laravel 微信小程序后端搭建步骤详解
2019/11/26 PHP
Bookmarklet实现启动jQuery(模仿 云输入法)
2010/09/15 Javascript
jQuery新闻滚动插件 jquery.roller.js
2011/06/27 Javascript
jquery无刷新验证邮箱地址实现实例
2014/02/19 Javascript
BootStrop前端框架入门教程详解
2016/12/25 Javascript
Vue.js实战之通过监听滚动事件实现动态锚点
2017/04/04 Javascript
原生js二级联动效果
2017/06/20 Javascript
微信小程序实现手指触摸画板
2018/07/09 Javascript
Python实现字符串的逆序 C++字符串逆序算法
2020/05/28 Python
python实现自动网页截图并裁剪图片
2018/07/30 Python
tensorflow实现加载mnist数据集
2018/09/08 Python
python正向最大匹配分词和逆向最大匹配分词的实例
2018/11/14 Python
python学习--使用QQ邮箱发送邮件代码实例
2019/04/16 Python
kali中python版本的切换方法
2019/07/11 Python
详解Django-channels 实现WebSocket实例
2019/08/22 Python
python3实现在二叉树中找出和为某一值的所有路径(推荐)
2019/12/26 Python
解决TensorFlow训练内存不断增长,进程被杀死问题
2020/02/05 Python
解决ROC曲线画出来只有一个点的问题
2020/02/28 Python
python实现三壶谜题的示例详解
2020/11/02 Python
python爬取招聘要求等信息实例
2020/11/20 Python
HTML5验证以及日期显示的实现详解
2013/07/05 HTML / CSS
澳大利亚香水在线商店:City Perfume
2020/09/02 全球购物
万代美国官网:PREMIUM BANDAI USA
2020/09/11 全球购物
教师自荐书
2013/10/08 职场文书
审计工作个人的自我评价
2013/12/25 职场文书
七年级音乐教学反思
2014/01/26 职场文书
门诊手术室工作制度
2014/01/30 职场文书
前处理组长岗位职责
2014/03/01 职场文书
保密承诺书范文
2014/03/27 职场文书
询价采购方案
2014/06/09 职场文书
员工自我评价范文
2015/03/11 职场文书
JavaScript ES6的函数拓展
2022/01/18 Javascript
python中 .npy文件的读写操作实例
2022/04/14 Python