解析php DOMElement 操作xml 文档的实现代码


Posted in PHP onMay 10, 2013
/*<?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <!-- css的样式定义,不加点。如:name{color:red;} -->
<?xml-stylesheet type="text/css" href="css.css"?>
<!-- 引入dtd文档定义文件 (根元素:班级)<!DOCTYPE 班级 SYSTEM "class.dtd" /> -->
<!-- <!DOCTYPE 班级[
<!ELEMENT 班级 (学生+)>
<!ELEMENT 学生 (名字,年龄,介绍)>
<!ELEMENT 名字 (#PCDATA)>
<!ELEMENT 年龄 (#PCDATA)>
<!ELEMENT 介绍 (#PCDATA)>
] /> -->
<班级>
<学生 number="101">
<名字>孙悟空</名字>
<名字>孙行者</名字>
<年龄>123</年龄>
<介绍><![CDATA[&*$%特殊字串^&#$&]]></介绍>
</学生>
<学生 number="10"2">
<名字>白骨精</名字>
<年龄>140</年龄>
<介绍>介绍内容</介绍>
</学生>
</班级>
*/
$xmldoc = new DOMDocument('1.0', 'UTF-8');
$xmldoc->load('datas.xml');
$itemsNodeList = $xmldoc->getElementsbyTagName('学生');
$itemElement = $itemsNodeList->item(0);//得到第一个完整的学生信息节点
$itemChildsNodeList = $itemElement->getElementsbyTagName('名字');//得到子节点“名字”,也许有多个名字
$itemChildNode = $itemChildsNodeList->item(0);//得到第一个名字节点
echo $itemChildNode->nodeValue;//输出节点值
//封装成函数
$nodeArr = array('名字', '年龄', '介绍'); 
function getNodeVal($xmldoc, $itemsName, $nodeArr){
    $items = $xmldoc->getElementsByTagName($itemsName);
     for($i=0; $i < $items->length; $i++){
        $item = $items->item($i);
        foreach($nodeArr as $node){
            $data[$i][] = $item->getElementsByTagName($node)->item(0)->nodeValue;
        }
    } 
    return $data;
}
$data = getNodeVal($xmldoc, '学生', $nodeArr);
print_r($data);

//添加节点
$xmldoc = new DOMDocument('1.0', 'UTF-8');
$xmldoc->load('datas.xml');
$items = $xmldoc->getElementsByTagName('班级')->item(0);//根节点
$student =  $xmldoc->createElement('学生');//创建一个新的学生节点
$stu_name = $xmldoc->createElement('名字','张三');
$stu_age = $xmldoc->createElement('年龄','15');
$stu_intro = $xmldoc->createElement('介绍','动手能力强且成绩稳定');
$items->appendChild($student);
$student->appendChild($stu_name);
$student->appendChild($stu_age);
$student->appendChild($stu_intro);
$bytes = $xmldoc->save('datas.xml'); 
echo ($bytes)? "写入了: $bytes 字节" : '保存失败';
//删除节点
$xmldoc = new DOMDocument('1.0', 'UTF-8');
$xmldoc->load('datas.xml');
$student = $xmldoc->getElementsByTagName('学生')->item(2);//直接找到要删除的节点
$student->parentNode->removeChild($student);//父节点的删除方法
$xmldoc->save('datas.xml');
//修改节点值
$student = $xmldoc->getElementsByTagName('学生')->item(2);
$student->getElementsByTagName('年龄')->item(0)->nodeValue += 10;
$student->setAttribute('id', '110');
$xmldoc->save('datas.xml');
//应用 Xpath 查找节点
$xml = new DOMDocument('1.0', 'UTF-8');
$xml->load('dat.xml');
$xpath = new DOMXPath($xml);
$nodeList = $xpath->query('/aaa/bbb/ddd/fff');
echo $nodeList->item(0)->nodeValue;
//SimpleXML 类操作 xml
/*
<?xml version="1.0" encoding="UTF-8"?>
<books>
<book house="清华出版">
<code>1001</code>
<price>200元</price>
<author>大明</author>
<title>天龙八部</title>
</book>
<book house="北大出版">
<code>1002</code>
<price>321元</price>
<author>张三</author>
<title>笑傲江湖</title>
</book>
<book house="人 民出版">
<code>1004</code>
<price>182元</price>
<author>李四</author>
<title>读者</title>
</book>
</books>
*/
$xml = simplexml_load_file('books.xml');
$books = $xml->book;
echo $books[1]->title . $books[1]['house'];//直接指向第二本书
foreach($xml as $item){
    echo $item->title,' ',$item['house'],'<br/>';
}
PHP 相关文章推荐
如何在PHP中使用Oracle数据库(3)
Oct 09 PHP
PHP 文件上传全攻略
Apr 28 PHP
邮箱正则表达式实现代码(针对php)
Jun 21 PHP
shell脚本作为保证PHP脚本不挂掉的守护进程实例分享
Jul 15 PHP
php中sprintf与printf函数用法区别解析
Feb 17 PHP
php获取文件大小的方法
Feb 26 PHP
php实现12306余票查询、价格查询示例
Apr 17 PHP
thinkphp的静态缓存用法分析
Nov 29 PHP
smarty内置函数capture用法分析
Jan 22 PHP
thinkphp3.x中变量的获取和过滤方法详解
May 20 PHP
thinkphp5使html5实现动态跳转的例子
Oct 16 PHP
tp5.1 框架数据库常见操作详解【添加、删除、更新、查询】
May 26 PHP
PHP 自定义错误处理函数的使用详解
May 10 #PHP
PHP 类相关函数的使用详解
May 10 #PHP
解析PHP缓存函数的使用说明
May 10 #PHP
基于PHP选项与信息函数的使用详解
May 10 #PHP
PHP 观察者模式的实现代码
May 10 #PHP
解析用PHP读写音频文件信息的详解(支持WMA和MP3)
May 10 #PHP
基于php实现长连接的方法与注意事项的问题
May 10 #PHP
You might like
php 空格,换行,跳格使用说明
2009/12/18 PHP
PHP中使用smarty生成静态文件的例子
2014/04/24 PHP
php邮箱地址正则表达式验证
2015/11/13 PHP
PHP时间日期增减操作示例【date strtotime实现加一天、加一月等操作】
2018/12/21 PHP
jquery 跨域访问问题解决方法(笔记)
2011/06/08 Javascript
Jquery实现仿新浪微博获取文本框能输入的字数代码
2013/02/22 Javascript
理解Javascript闭包
2013/11/01 Javascript
jQuery 获取浏览器所在的IP地址的小例子
2013/11/08 Javascript
关闭ie窗口清除Session的解决方法
2014/01/10 Javascript
整理Javascript数组学习笔记
2015/11/29 Javascript
AngularJS ng-controller 指令简单实例
2016/08/01 Javascript
提高Node.js性能的应用技巧分享
2017/08/10 Javascript
vue父组件向子组件动态传值的两种方法
2017/11/11 Javascript
基于vue-cli vue-router搭建底部导航栏移动前端项目
2018/02/28 Javascript
jQuery常见的遍历DOM操作详解
2018/09/05 jQuery
Vue2(三)实现子菜单展开收缩,带动画效果实现方法
2019/04/28 Javascript
bootstrap table列和表头对不齐的解决方法
2019/07/19 Javascript
vue实现图片按比例缩放问题操作
2020/08/11 Javascript
[53:21]2014 DOTA2国际邀请赛中国区预选赛5.21 DT VS LGD-CDEC
2014/05/22 DOTA
[01:55]TI9显影之尘系列 - Evil Geniuses
2019/08/22 DOTA
在DigitalOcean的服务器上部署flaskblog应用
2015/12/19 Python
python中redis查看剩余过期时间及用正则通配符批量删除key的方法
2018/07/30 Python
Python Django 前后端分离 API的方法
2019/08/28 Python
django-rest-swagger对API接口注释的方法
2019/08/29 Python
Python如何使用vars返回对象的属性列表
2020/10/17 Python
经典c++面试题五
2014/12/17 面试题
自荐书封面下载
2013/11/29 职场文书
党员个人思想汇报
2013/12/28 职场文书
项目副经理岗位职责
2013/12/30 职场文书
公司薪酬管理制度
2014/01/31 职场文书
大学生就业自我推荐信
2014/05/10 职场文书
员工年度工作总结2015
2015/05/18 职场文书
大卫科波菲尔读书笔记
2015/06/30 职场文书
2019年XX公司的晨会制度及流程!
2019/07/23 职场文书
springboot如何接收application/x-www-form-urlencoded类型的请求
2021/11/02 Java/Android
详解Android中的TimePickerView(时间选择器)的用法
2022/04/30 Java/Android