解析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 魔术函数使用说明
May 14 PHP
PHP中用hash实现的数组
Jul 17 PHP
遭遇php的in_array低性能问题
Sep 17 PHP
PHP魔术引号所带来的安全问题分析
Jul 15 PHP
php数组键名技巧小结
Feb 17 PHP
使用PHP免费发送定时短信的实例
Oct 24 PHP
CI框架AR数据库操作常用函数总结
Nov 21 PHP
PHP使用Redis替代文件存储Session的方法
Feb 15 PHP
php面向对象之反射功能与用法分析
Mar 29 PHP
PHP getName()函数讲解
Feb 03 PHP
Laravel开启跨域请求的方法
Oct 13 PHP
Laravel5.1 框架路由基础详解
Jan 04 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中的正规表达式(一)
2006/10/09 PHP
一段php加密解密的代码
2007/07/16 PHP
php压缩和解压缩字符串的方法
2015/03/14 PHP
ThinkPHP使用Smarty第三方插件方法小结
2016/03/19 PHP
PHP MYSQL简易交互式站点开发
2016/12/27 PHP
js利用Array.splice实现Array的insert/remove
2009/01/13 Javascript
JavaScript常用脚本汇总(二)
2015/03/04 Javascript
js实现的万能flv网页播放器代码
2016/04/30 Javascript
深入理解javascript作用域第二篇之词法作用域和动态作用域
2016/07/24 Javascript
JS中用try catch对代码运行的性能影响分析
2016/12/26 Javascript
使用JavaScript判断用户输入的是否为正整数(两种方法)
2017/02/05 Javascript
vue-quill-editor实现图片上传功能
2017/08/08 Javascript
js模块加载方式浅析
2017/08/12 Javascript
vue-router 组件复用问题详解
2018/01/22 Javascript
vue使用 better-scroll的参数和方法详解
2018/01/25 Javascript
JavaScript作用域、闭包、对象与原型链概念及用法实例总结
2018/08/20 Javascript
微信小程序开发之tabbar图标和颜色的实现
2018/10/17 Javascript
python实现井字棋游戏
2020/03/30 Python
Python实现TCP协议下的端口映射功能的脚本程序示例
2016/06/14 Python
python 字典(dict)按键和值排序
2016/06/28 Python
Python list与NumPy array 区分详解
2019/11/06 Python
Python3 hashlib密码散列算法原理详解
2020/03/30 Python
keras分类之二分类实例(Cat and dog)
2020/07/09 Python
python切割图片的示例
2020/11/12 Python
详解Python中的Lock和Rlock
2021/01/26 Python
HTML5给汉字加拼音收起展开组件的实现代码
2020/04/08 HTML / CSS
canvas版人体时钟的实现示例
2021/01/29 HTML / CSS
惊艳的手工时装首饰:Migonne Gavigan
2018/02/23 全球购物
如何查找网页漏洞
2016/06/22 面试题
广播电视新闻学专业应届生求职信
2013/10/08 职场文书
农民工工资支付承诺函
2014/03/31 职场文书
2015年世界卫生日活动总结
2015/02/09 职场文书
详解TS数字分隔符和更严格的类属性检查
2021/05/06 Javascript
nginx+lua单机上万并发的实现
2021/05/31 Servers
Python 如何将integer转化为罗马数(3999以内)
2021/06/05 Python
浅谈mysql哪些情况会导致索引失效
2021/11/20 MySQL