解析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初学者头疼十四条问题大总结
Nov 12 PHP
php 输出双引号&quot;与单引号'的方法
May 09 PHP
PHP对象Object的概念 介绍
Jun 14 PHP
php使用websocket示例详解
Mar 12 PHP
19个超实用的PHP代码片段
Mar 14 PHP
ThinkPHP之A方法实例讲解
Jun 20 PHP
php递归调用删除数组空值元素的方法
Apr 28 PHP
php生成图片验证码-附五种验证码
Aug 19 PHP
php集成动态口令认证
Jul 21 PHP
php opendir()列出目录下所有文件的实例代码
Oct 02 PHP
laravel 解决后端无法获取到前端Post过来的值问题
Oct 22 PHP
Laravel框架源码解析之反射的使用详解
May 14 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中DOMDocument简单用法示例代码(XML创建、添加、删除、修改)
2010/12/19 PHP
web目录下不应该存在多余的程序(安全考虑)
2012/05/09 PHP
关于JSON以及JSON在PHP中的应用技巧
2013/11/27 PHP
PHP中使用SimpleXML检查XML文件结构实例
2015/01/07 PHP
PHP邮件群发机实现代码
2016/02/16 PHP
php array_values 返回数组的所有值详解及实例
2016/11/12 PHP
php进行md5加密简单实例方法
2019/09/19 PHP
yii框架结合charjs实现统计30天数据的方法
2020/04/04 PHP
JSON 学习之JSON in JavaScript详细使用说明
2010/02/23 Javascript
js 获取子节点函数 (兼容FF与IE)
2010/04/18 Javascript
关于URL中的特殊符号使用介绍
2011/11/03 Javascript
EasyUI 中 MenuButton 的使用方法
2012/07/14 Javascript
JS获取各种宽度、高度的简单介绍
2014/12/19 Javascript
关于JavaScript数组你所不知道的3件事
2016/08/24 Javascript
JS日程管理插件FullCalendar中文说明文档
2017/02/06 Javascript
实现微信小程序的wxml文件和wxss文件在webstrom的支持
2017/06/12 Javascript
Vue2.0子同级组件之间数据交互方法
2018/02/28 Javascript
vue iView 上传组件之手动上传功能
2018/03/16 Javascript
使用webpack搭建react开发环境的方法
2018/05/15 Javascript
vue 实现左右拖拽元素并且不超过他的父元素的宽度
2018/11/30 Javascript
详解wepy开发小程序踩过的坑(小结)
2019/05/22 Javascript
[52:02]完美世界DOTA2联赛PWL S2 FTD.C vs SZ 第一场 11.27
2020/11/30 DOTA
Python随机生成信用卡卡号的实现方法
2015/05/14 Python
Python备份目录及目录下的全部内容的实现方法
2016/06/12 Python
用python一行代码得到数组中某个元素的个数方法
2019/01/28 Python
html5新增的属性和废除的属性简要概述
2013/02/20 HTML / CSS
Room Mate Hotels美国:西班牙酒店品牌
2018/04/10 全球购物
澳大利亚在线床零售商:Bedworks
2020/09/01 全球购物
大学校运会广播稿
2014/02/03 职场文书
医药类个人求职的自我评价
2014/02/12 职场文书
护理学院专科毕业生求职信
2014/06/28 职场文书
甘南现象心得体会
2014/09/11 职场文书
乡镇党员群众路线教育实践活动对照检查材料思想汇报
2014/10/05 职场文书
三八节活动主持词
2015/07/04 职场文书
解决Mysql报错 Table 'mysql.user' doesn't exist
2022/05/06 MySQL
Python中tqdm的使用和例子
2022/09/23 Python