解析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 相关文章推荐
了解Joomla 这款来自国外的php网站管理系统
Mar 11 PHP
PHP 反向排序和随机排序代码
Jun 30 PHP
php使用codebase生成随机数
Mar 25 PHP
50个PHP程序性能优化的方法
Jun 02 PHP
PHP处理大量表单字段的便捷方法
Feb 07 PHP
php实现encode64编码类实例
Mar 24 PHP
PHP常用处理静态操作类
Apr 03 PHP
php获取网站百度快照日期的方法
Jul 29 PHP
PHP的命令行命令使用指南
Aug 18 PHP
详解WordPress中过滤链接与过滤SQL语句的方法
Dec 18 PHP
php处理json格式数据经典案例总结
May 19 PHP
php中str_pad()函数用法分析
Mar 28 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
阿拉伯的咖啡与水烟
2021/03/03 咖啡文化
php读取mysql中文数据出现乱码的解决方法
2013/08/16 PHP
PHP中ajax无刷新上传图片与图片下载功能
2017/02/21 PHP
JQuery 学习笔记 element属性控制
2009/07/23 Javascript
jquery 循环显示div的示例代码
2013/10/18 Javascript
javascript静态页面传值的三种方法分享
2013/11/12 Javascript
jQuery中trigger()与bind()用法分析
2015/12/18 Javascript
使用Promise解决多层异步调用的简单学习心得
2016/05/17 Javascript
AngularJS 遇到的小坑与技巧小结
2016/06/07 Javascript
node跨域请求方法小结
2017/08/25 Javascript
基于node.js express mvc轻量级框架实践
2017/09/14 Javascript
Vue.js图片预览插件使用详解
2018/08/27 Javascript
JavaScript中七种流行的开源机器学习框架
2018/10/11 Javascript
Vue.Draggable拖拽功能的配置使用方法
2020/07/29 Javascript
nodejs 使用http进行post或get请求的实例(携带cookie)
2019/01/03 NodeJs
AngularJS动态生成select下拉框的方法实例
2019/11/17 Javascript
如何在vue项目中嵌入jsp页面的方法(2种)
2020/02/06 Javascript
在Python中通过threading模块定义和调用线程的方法
2016/07/12 Python
python3 pillow生成简单验证码图片的示例
2017/09/19 Python
python、java等哪一门编程语言适合人工智能?
2017/11/13 Python
python+django加载静态网页模板解析
2017/12/12 Python
pandas中的DataFrame按指定顺序输出所有列的方法
2018/04/10 Python
Python3 shutil(高级文件操作模块)实例用法总结
2020/02/19 Python
css3模拟jq点击事件的实例代码
2017/07/06 HTML / CSS
高清屏下canvas重置尺寸引发的问题的解决
2019/10/14 HTML / CSS
What's the difference between Debug and Trace class? (Debug类与Trace类有什么区别)
2013/09/10 面试题
自学考试自我鉴定范文
2013/09/26 职场文书
职业女性的职业规划
2014/03/04 职场文书
垃圾桶标语
2014/06/24 职场文书
大学生求职信例文
2014/06/29 职场文书
广告艺术设计专业自荐书
2014/07/08 职场文书
2014入党积极分子批评与自我批评思想汇报
2014/09/20 职场文书
群众路线领导干部个人对照检查材料(集锦)
2014/09/23 职场文书
给老师的一封感谢信
2015/01/20 职场文书
python实现语音常用度量方法的代码详解
2021/05/25 Python
Mysql中调试存储过程最简单的方法
2021/06/30 MySQL