解析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基础知识:类与对象(1)
Dec 13 PHP
PHP_MySQL教程-第一天
Mar 18 PHP
PHP Session变量不能传送到下一页的解决方法
Nov 27 PHP
发一个php简单的伪原创程序,配合商城采集用的
Oct 12 PHP
ThinkPHP模板引擎之导入资源文件方法详解
Jun 18 PHP
PHP实现采集中国天气网未来7天天气
Oct 15 PHP
浅析php适配器模式(Adapter)
Nov 25 PHP
PHP中余数、取余的妙用
Jun 29 PHP
php实现mysql数据库连接操作及用户管理
Nov 08 PHP
php实现留言板功能(代码详解)
Mar 28 PHP
PHP正则之正向预查与反向预查讲解与实例
Apr 06 PHP
PHP优化之批量操作MySQL实例分析
Apr 23 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 CLI实现简单的数据库实时监控调度
2009/07/01 PHP
php实现下载限制速度示例分享
2014/02/13 PHP
php缓冲输出实例分析
2015/01/05 PHP
CI框架表单验证实例详解
2016/11/21 PHP
《JavaScript高级程序设计》阅读笔记(一) ECMAScript基础
2012/02/27 Javascript
jQuery中mouseover事件用法实例
2014/12/26 Javascript
thinkjs之页面跳转同步异步操作
2017/02/05 Javascript
vuejs响应用户事件(如点击事件)
2017/03/14 Javascript
vue系列之动态路由详解【原创】
2017/09/10 Javascript
详解Vue路由History mode模式中页面无法渲染的原因及解决
2017/09/28 Javascript
angularjs实现猜大小功能
2017/10/23 Javascript
Angular 数据请求的实现方法
2018/05/07 Javascript
ajaxfileupload.js实现上传文件功能
2019/04/19 Javascript
Vue Element UI + OSS实现上传文件功能
2019/07/31 Javascript
jQuery中event.target和this的区别详解
2020/08/13 jQuery
Javascript节流函数throttle和防抖函数debounce
2020/12/03 Javascript
python登录pop3邮件服务器接收邮件的方法
2015/04/30 Python
Python实现的RSS阅读器实例
2015/07/25 Python
利用Python如何生成随机密码
2016/04/20 Python
Python实现matplotlib显示中文的方法详解
2018/02/06 Python
python 实时得到cpu和内存的使用情况方法
2018/06/11 Python
Caffe均值文件mean.binaryproto转mean.npy的方法
2018/07/09 Python
浅谈Python在pycharm中的调试(debug)
2018/11/29 Python
python paramiko远程服务器终端操作过程解析
2019/12/14 Python
Django 404、500页面全局配置知识点详解
2020/03/10 Python
计算Python Numpy向量之间的欧氏距离实例
2020/05/22 Python
孕妇内衣和胸罩:Cake Maternity
2018/07/16 全球购物
HEMA英国:荷兰原创设计
2018/08/28 全球购物
中医专业应届生求职信
2013/11/17 职场文书
档案保密承诺书
2014/06/03 职场文书
2013年最新自荐信范文
2014/06/23 职场文书
售票员岗位职责
2015/02/15 职场文书
农村党支部承诺书
2015/04/30 职场文书
教师素质教育心得体会
2016/01/19 职场文书
Python3 使用pip安装git并获取Yahoo金融数据的操作
2021/04/08 Python
vmware虚拟机打不开vmx文件怎么办 ?vmware虚拟机vmx文件打开方法
2022/04/08 数码科技