解析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 相关文章推荐
VML绘图板②脚本--VMLgraph.js、XMLtool.js
Oct 09 PHP
PHP学习之数组的定义和填充
Apr 17 PHP
简单的php写入数据库类代码分享
Jul 26 PHP
PHP fopen 读取带中文URL地址的一点见解
Sep 25 PHP
深入PHP autoload机制的详解
Jun 09 PHP
php addslashes 利用递归实现使用反斜线引用字符串
Aug 05 PHP
PDO预处理语句PDOStatement对象使用总结
Nov 20 PHP
wampserver改变默认网站目录的办法
Aug 05 PHP
Zend Framework教程之响应对象的封装Zend_Controller_Response实例详解
Mar 07 PHP
php 解决substr()截取中文字符乱码问题
Jul 18 PHP
PHP+iframe图片上传实现即时刷新效果
Nov 18 PHP
php实现多站点共用session实现单点登录的方法详解
Sep 18 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
Zerg基本策略
2020/03/14 星际争霸
聊天室php&amp;mysql(一)
2006/10/09 PHP
常见的PHP五种设计模式小结
2011/03/23 PHP
PHP使用适合阅读的格式显示文件大小的方法
2015/03/05 PHP
PHP数据分析引擎计算余弦相似度算法示例
2017/08/08 PHP
Gambit vs ForZe BO3 第二场 2.13
2021/03/10 DOTA
一个用js实现控制台控件的代码
2007/09/04 Javascript
Document对象内容集合(比较全)
2010/09/06 Javascript
批量实现面向对象的实例代码
2013/07/01 Javascript
js与jQuery 获取父窗、子窗的iframe
2013/12/20 Javascript
js实现的标题栏新消息闪烁提示效果
2014/06/06 Javascript
JavaScript 对象深入学习总结(经典)
2015/09/29 Javascript
AngularJS中的表单简单入门
2016/07/28 Javascript
AngularJS实现路由实例
2017/02/12 Javascript
javascript作用域链与执行环境详解
2017/03/25 Javascript
Angular ElementRef简介及其使用
2018/10/01 Javascript
vue-router beforeEach跳转路由验证用户登录状态
2018/12/26 Javascript
node.js事件轮询机制原理知识点
2019/12/22 Javascript
vue项目实现多语言切换的思路
2020/09/17 Javascript
[07:12]2014DOTA2西雅图国际邀请赛 黑马Liquid专题采访
2014/07/12 DOTA
Python 删除连续出现的指定字符的实例
2018/06/29 Python
纯用NumPy实现神经网络的示例代码
2018/10/24 Python
Python-jenkins 获取job构建信息方式
2020/05/12 Python
Python使用for生成列表实现过程解析
2020/09/22 Python
通过CSS3的object-fit来调整图片适配尺寸的技巧简介
2016/02/27 HTML / CSS
Clearly澳大利亚:购买眼镜、太阳镜和隐形眼镜
2018/04/26 全球购物
英国PC组件和在线电脑商店:SCAN
2019/04/18 全球购物
迪卡侬(Decathlon)加拿大官网:源自法国的运动专业超市
2020/11/22 全球购物
小学三八妇女节活动方案
2014/03/16 职场文书
寝室长工作失责检讨书
2014/10/06 职场文书
个人作风建设心得体会
2014/10/22 职场文书
小学五一劳动节活动总结
2015/02/09 职场文书
社区党务工作总结2015
2015/05/19 职场文书
遗嘱格式范本
2015/08/07 职场文书
学习党史心得体会2016
2016/01/23 职场文书
nginx 防盗链防爬虫配置详解
2021/03/31 Servers