解析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和MySql来与ODBC数据连接
Oct 09 PHP
php线性表顺序存储实现代码(增删查改)
Feb 16 PHP
PHP保存带BOM文件的方法
Feb 12 PHP
PHP几个实用自定义函数小结
Jan 25 PHP
PHP7.1新功能之Nullable Type用法分析
Sep 26 PHP
php解析mht文件转换成html的实例
Mar 13 PHP
PHP读取Excel类文件
May 15 PHP
phpStudy2016 配置多个域名期间遇到的问题小结
Oct 19 PHP
PHP给前端返回一个JSON对象的实例讲解
May 31 PHP
浅谈PHPANALYSIS提取关键字
Mar 08 PHP
浅谈Laravel中的三种中间件的作用
Oct 13 PHP
laravel在中间件内生成参数并且传递到控制器中的2种姿势
Oct 15 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和ACCESS写聊天室(七)
2006/10/09 PHP
使用php get_headers 判断URL是否有效的解决办法
2013/04/27 PHP
完美解决:Apache启动问题―(OS 10022)提供了一个无效的参数
2013/06/08 PHP
深入浅析PHP无限极分类的案例教程
2016/05/09 PHP
CodeIgniter 完美解决URL含有中文字符串
2016/05/13 PHP
PHP微信支付开发实例
2016/06/22 PHP
javascript 鼠标滚轮事件
2009/04/09 Javascript
javascript IFrame 强制刷新代码
2009/07/23 Javascript
IE 下的只读 innerHTML
2009/08/21 Javascript
javascript 用原型继承来实现对象系统
2010/03/22 Javascript
关于jQuery参考实例2.0 用jQuery选择元素
2013/04/07 Javascript
js获取location.href的参数实例代码
2013/08/02 Javascript
jQuery焦点图轮播特效代码分享(3款)
2015/09/05 Javascript
JavaScript匿名函数之模仿块级作用域
2015/12/12 Javascript
javascript中sort排序实例详解
2016/07/24 Javascript
浅析JavaScript中break、continue和return的区别
2016/11/30 Javascript
js倒计时小实例(多次定时)
2016/12/08 Javascript
vue项目实现github在线预览功能
2018/06/20 Javascript
浅谈目前可以使用ES10的5个新特性
2019/06/25 Javascript
使用JavaScript和MQTT开发物联网应用示例解析
2020/08/07 Javascript
vue 获取元素额外生成的data-v-xxx操作
2020/09/09 Javascript
手把手教你如何编译打包video.js
2020/12/09 Javascript
[43:41]VP vs RNG 2019国际邀请赛淘汰赛 败者组 BO3 第二场 8.21.mp4
2020/07/19 DOTA
python如何压缩新文件到已有ZIP文件
2018/03/14 Python
python实现将多个文件分配到多个文件夹的方法
2019/01/07 Python
pytorch 准备、训练和测试自己的图片数据的方法
2020/01/10 Python
Python找出列表中出现次数最多的元素三种方式
2020/02/24 Python
使用html5制作loading图的示例
2014/04/14 HTML / CSS
美国汽配连锁巨头Pep Boys官网:轮胎更换、汽车维修服务和汽车零部件
2017/01/14 全球购物
智能室内花园:Click & Grow
2021/01/29 全球购物
感谢信范文大全
2015/01/23 职场文书
毕业生对母校寄语
2015/02/26 职场文书
创业计划书之游泳馆
2019/09/16 职场文书
nginx简单配置多个server的方法
2021/03/31 Servers
QT与javascript交互数据的实现
2021/05/26 Javascript
vite+vue3.0+ts+element-plus快速搭建项目的实现
2021/06/24 Vue.js