解析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 相关文章推荐
让Json更懂中文(JSON_UNESCAPED_UNICODE)
Oct 27 PHP
PHP获取网址的顶级域名函数代码
Sep 24 PHP
利用phpExcel实现Excel数据的导入导出(全步骤详细解析)
Nov 26 PHP
Laravel 4 初级教程之Pages、表单验证
Oct 30 PHP
主流PHP框架的优缺点对比分析
Dec 25 PHP
PHP积分兑换接口实例
Feb 09 PHP
Java和PHP在Web开发方面对比分析
Mar 01 PHP
php分割合并两个字符串的函数实例
Jun 19 PHP
ThinkPHP控制器详解
Jul 27 PHP
变量在 PHP7 内部的实现(一)
Dec 21 PHP
PHP实现的DES加密解密实例代码
Apr 06 PHP
PHP获取文本框、密码域、按钮的值实例代码
Apr 19 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
星际中一些鲜为人知的详细资料
2020/03/04 星际争霸
Smarty安装配置方法
2008/04/10 PHP
php 表单验证实现代码
2009/03/10 PHP
在PHP中使用反射技术的架构插件使用说明
2010/05/18 PHP
PHP中round()函数对浮点数进行四舍五入的方法
2014/11/19 PHP
PHP MVC框架路由学习笔记
2016/03/02 PHP
Laravel Intervention/image图片处理扩展包的安装、使用与可能遇到的坑详解
2017/11/14 PHP
csdn 博客中实现运行代码功能实现
2009/08/29 Javascript
getElementByIdx_x js自定义getElementById函数
2012/01/24 Javascript
jQuery事件 delegate()使用方法介绍
2012/10/30 Javascript
轻松创建nodejs服务器(7):阻塞操作的实现
2014/12/18 NodeJs
js基于面向对象实现网页TAB选项卡菜单效果代码
2015/09/09 Javascript
浅析JavaScript回调函数应用
2016/05/22 Javascript
JS从一组数据中找到指定的单条数据的方法
2016/06/02 Javascript
jquery插件bootstrapValidator表单验证详解
2016/12/15 Javascript
JavaScript实现shuffle数组洗牌操作示例
2019/01/03 Javascript
Python FTP操作类代码分享
2014/05/13 Python
Python实现的一个简单LRU cache
2014/09/26 Python
Python ldap实现登录实例代码
2016/09/30 Python
Python编程之event对象的用法实例分析
2017/03/23 Python
弄懂这56个Python使用技巧(轻松掌握Python高效开发)
2019/09/18 Python
使用Python paramiko模块利用多线程实现ssh并发执行操作
2019/12/05 Python
基于Python下载网络图片方法汇总代码实例
2020/06/24 Python
周仰杰(JIMMY CHOO)英国官方网站:闻名世界的鞋子品牌
2018/10/28 全球购物
TCP协议通讯的过程和步骤是什么
2015/10/18 面试题
毕业生毕业总结的自我评价范文
2013/11/02 职场文书
酒店保安领班职务说明书
2014/03/04 职场文书
《回乡偶书》教学反思
2014/04/12 职场文书
我的理想演讲稿
2014/04/30 职场文书
怎样拟定创业计划书
2014/05/01 职场文书
任命书模板
2014/06/04 职场文书
建筑质检员岗位职责
2015/04/08 职场文书
2016年机关单位节能宣传周活动总结
2016/04/05 职场文书
php微信小程序解包过程实例详解
2021/03/31 PHP
Go Gin实现文件上传下载的示例代码
2021/04/02 Golang
Python中基础数据类型 set集合知识点总结
2021/08/02 Python