解析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 服务器配置(使用Apache及IIS两种方法)
Jun 01 PHP
discuz的php防止sql注入函数
Jan 17 PHP
session在php5.3中的变化 session_is_registered() is deprecated in
Nov 12 PHP
php实现查看邮件是否已被阅读的方法
Dec 03 PHP
smarty模板引擎中变量及变量修饰器用法实例
Jan 22 PHP
Windows下PHP开发环境搭建教程(Apache+PHP+MySQL)
Jun 13 PHP
微信利用PHP创建自定义菜单的方法
Aug 01 PHP
Yii2实现log输出到file及database的方法
Nov 12 PHP
PHP7多线程搭建教程
Apr 21 PHP
PHP+MariaDB数据库操作基本技巧备忘总结
May 21 PHP
PHP观察者模式示例【Laravel框架中有用到】
Jun 15 PHP
php封装的pdo数据库操作工具类与用法示例
May 08 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计划任务之关闭浏览器后仍然继续执行的函数
2010/07/22 PHP
window+nginx+php环境配置 附配置搭配说明
2010/12/29 PHP
如何使用PHP获取指定日期所在月的开始日期与结束日期
2013/08/01 PHP
通过源码解析Laravel的依赖注入
2018/01/22 PHP
php统计数组不同元素的个数的实例方法
2019/09/26 PHP
JavaScript 异步调用框架 (Part 4 - 链式调用)
2009/08/04 Javascript
编写Js代码要注意的几条规则
2010/09/10 Javascript
读jQuery之十 事件模块概述
2011/06/27 Javascript
JavaScript打字小游戏代码
2011/12/26 Javascript
Javascript中克隆一个数组的实现代码
2013/12/06 Javascript
轻松创建nodejs服务器(8):非阻塞是如何实现的
2014/12/18 NodeJs
jQuery实现的小图列表,大图展示效果幻灯片示例
2016/10/25 Javascript
jQuery实现的页面遮罩层功能示例【测试可用】
2017/10/14 jQuery
微信小程序实现图片放大预览功能
2020/10/22 Javascript
vue的全局提示框组件实例代码
2018/02/26 Javascript
Vue中 v-if/v-show/插值表达式导致闪现的原因及解决办法
2018/10/12 Javascript
JS实现的贪吃蛇游戏完整实例
2019/01/18 Javascript
全面分析JavaScript 继承
2019/05/30 Javascript
vue使用自定义事件的表单输入组件用法详解【日期组件与货币组件】
2020/06/01 Javascript
vue实现简单图片上传
2020/06/30 Javascript
[01:21:36]CHAOS vs Alliacne 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
教你用python3根据关键词爬取百度百科的内容
2016/08/18 Python
解决pycharm 误删掉项目文件的处理方法
2018/10/22 Python
python列表list保留顺序去重的实例
2018/12/14 Python
python twilio模块实现发送手机短信功能
2019/08/02 Python
Python中six模块基础用法
2019/12/08 Python
Pycharm激活码激活两种快速方式(附最新激活码和插件)
2020/03/12 Python
世界最大的私人旅行指南出版商:孤独星球
2016/08/23 全球购物
编写strcpy函数
2014/06/24 面试题
实习生个人找工作的自我评价
2013/10/30 职场文书
高二美术教学反思
2014/01/14 职场文书
《大海那边》教学反思
2014/04/09 职场文书
大学本科生职业生涯规划书范文
2014/09/14 职场文书
2015年度护士个人工作总结
2015/04/09 职场文书
初中同学会致辞
2015/08/01 职场文书
python 镜像环境搭建总结
2022/09/23 Python