解析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 相关文章推荐
解决phpmyadmin中文乱码问题。。。
Jan 18 PHP
PHP下10件你也许并不了解的事情
Sep 11 PHP
php 过滤器实现代码
Aug 09 PHP
服务器web工具 php环境下
Dec 29 PHP
php注销代码(session注销)
May 31 PHP
在windows服务器开启php的gd库phpinfo中未发现
Jan 13 PHP
input file获得文件根目录简单实现
Apr 26 PHP
php中并发读写文件冲突的解决方案
Oct 25 PHP
使用PHP静态变量当缓存的方法
Nov 13 PHP
php缓冲输出实例分析
Jan 05 PHP
PHP中static关键字以及与self关键字的区别
Jul 01 PHP
解决在Laravel 中处理OPTIONS请求的问题
Oct 11 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
完美的2个php检测字符串是否是utf-8编码函数分享
2014/07/28 PHP
浅谈php中fopen不能创建中文文件名文件的问题
2017/02/06 PHP
PHP whois查询类定义与用法示例
2019/04/03 PHP
用js实现的一个Flash滚动轮换显示图片代码生成器
2007/03/14 Javascript
jQuery学习笔记之DOM对象和jQuery对象
2010/12/22 Javascript
showModelDialog弹出文件下载窗口的使用示例
2013/11/19 Javascript
深入理解JavaScript是如何实现继承的
2013/12/12 Javascript
setinterval()与clearInterval()JS函数的调用方法
2015/01/21 Javascript
动态加载jQuery的方法
2015/06/16 Javascript
Jquery实现顶部弹出框特效
2015/08/08 Javascript
JavaScript中创建对象的模式汇总
2016/04/19 Javascript
基于jquery插件实现拖拽删除图片功能
2020/08/27 Javascript
利用React-router+Webpack快速构建react程序
2016/10/27 Javascript
js数组操作方法总结(必看篇)
2016/11/22 Javascript
JS函数节流和函数防抖问题分析
2017/12/18 Javascript
浅谈Vue 性能优化之深挖数组
2018/12/11 Javascript
解决node.js含有%百分号时发送get请求时浏览器地址自动编码的问题
2019/11/20 Javascript
[01:52]2014DOTA2西雅图邀请赛 V社开大会你不知道的小秘密
2014/07/08 DOTA
[01:02:32]DOTA2-DPC中国联赛 正赛 iG vs PSG.LGD BO3 第二场 2月26日
2021/03/11 DOTA
python读取视频流提取视频帧的两种方法
2020/10/22 Python
深入理解Python异常处理的哲学
2019/02/01 Python
用django-allauth实现第三方登录的示例代码
2019/06/24 Python
如何通过Python实现标签云算法
2019/07/02 Python
django的聚合函数和aggregate、annotate方法使用详解
2019/07/23 Python
django中使用POST方法获取POST数据
2019/08/20 Python
Python函数__new__及__init__作用及区别解析
2020/08/31 Python
python读取图片颜色值并生成excel像素画的方法实例
2021/02/19 Python
详解HTML5中表单验证的8种方法介绍
2016/12/19 HTML / CSS
小程序canvas中文字设置居中锚点
2019/04/16 HTML / CSS
大学生学业生涯规划
2014/01/05 职场文书
致800米运动员广播稿
2014/02/16 职场文书
工作收入证明模板
2014/10/10 职场文书
2014年酒店服务员工作总结
2014/12/08 职场文书
教导主任个人总结
2015/03/03 职场文书
创业计划书之面包店
2019/09/17 职场文书
Python帮你解决手机qq微信内存占用太多问题
2022/02/15 Python