解析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语法(2)
Oct 09 PHP
我的论坛源代码(七)
Oct 09 PHP
PHP生成网页快照 不用COM不用扩展.
Feb 11 PHP
php小技巧 把数组的键和值交换形成了新的数组,查找值取得键
Jun 02 PHP
php 批量替换程序的具体实现代码
Oct 04 PHP
Codeigniter购物车类不能添加中文的解决方法
Nov 29 PHP
PHP中使用Imagick实现各种图片效果实例
Jan 21 PHP
Php-Redis安装测试笔记
Mar 05 PHP
php通过文件头判断格式的方法
May 28 PHP
PHP用mysql_insert_id()函数获得刚插入数据或当前发布文章的ID
Nov 25 PHP
PHP封装的PDO数据库操作类实例
Jun 21 PHP
PHP PDOStatement::errorInfo讲解
Jan 31 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
PHILIPS L4X25T电路分析和打理
2021/03/02 无线电
PHP:风雨欲来 路在何方?
2006/10/09 PHP
php可扩展的验证类实例(可对邮件、手机号、URL等验证)
2015/07/09 PHP
表单提交验证类
2006/07/14 Javascript
Track Image Loading效果代码分析
2007/08/13 Javascript
js鼠标滑轮滚动事件绑定的简单实例(兼容主流浏览器)
2014/01/14 Javascript
页面刷新时记住滚动条的位置jquery代码
2014/06/17 Javascript
js实现鼠标滑过文字链接色彩变化的效果
2015/05/06 Javascript
JS实现图文并茂的tab选项卡效果示例【附demo源码下载】
2016/09/21 Javascript
微信小程序 支付功能开发错误总结
2017/02/21 Javascript
Vue.js实战之组件的进阶
2017/04/04 Javascript
从vue源码解析Vue.set()和this.$set()
2018/08/30 Javascript
vue axios基于常见业务场景的二次封装的实现
2018/09/21 Javascript
js核心基础之闭包的应用实例分析
2019/05/11 Javascript
微信小程序如何修改radio和checkbox的默认样式和图标
2019/07/24 Javascript
[49:21]TNC vs VG 2019DOTA2国际邀请赛淘汰赛 胜者组赛BO3 第三场 8.20.mp4
2019/08/22 DOTA
[01:02:00]DOTA2-DPC中国联赛 正赛 Elephant vs IG BO3 第三场 1月24日
2021/03/11 DOTA
python通过post提交数据的方法
2015/05/06 Python
zookeeper python接口实例详解
2018/01/18 Python
Python3 Post登录并且保存cookie登录其他页面的方法
2018/12/28 Python
ActiveMQ:使用Python访问ActiveMQ的方法
2019/01/30 Python
python实现连连看辅助之图像识别延伸
2019/07/17 Python
Python大数据之网络爬虫的post请求、get请求区别实例分析
2019/11/16 Python
Python数据持久化存储实现方法分析
2019/12/21 Python
45个非常奇妙的CSS3 特性应用示例
2012/01/01 HTML / CSS
英国花园药房: The Garden Pharmacy
2017/12/28 全球购物
英国时尚高尔夫服装购物网站:Trendy Golf
2020/01/10 全球购物
英文自我鉴定
2013/12/10 职场文书
小区门卫岗位职责范本
2014/08/24 职场文书
园艺专业毕业生求职信
2014/09/02 职场文书
2014政府领导班子对照检查材料思想汇报(3篇)
2014/09/26 职场文书
党员自我评议对照检查材料
2014/09/27 职场文书
房屋租赁合同协议书范本
2014/10/19 职场文书
故意伤害人身损害赔偿协议书
2014/11/19 职场文书
关爱留守儿童捐款倡议书
2015/04/27 职场文书
Nginx中使用Lua脚本与图片的缩略图处理的实现
2022/03/18 Servers