解析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伪造referer突破网盘禁止外连的代码
Jun 15 PHP
php下正则来匹配dede模板标签的代码
Aug 21 PHP
谷歌音乐搜索栏的提示功能php修正代码
May 09 PHP
php 操作符与控制结构
Mar 07 PHP
浅析php变量修饰符static的使用
Jun 28 PHP
php调整gif动画图片尺寸示例代码分享
Dec 05 PHP
php一个解析字符串排列数组的方法
May 12 PHP
Zend Framework教程之请求对象的封装Zend_Controller_Request实例详解
Mar 07 PHP
PHP+Ajax异步带进度条上传文件实例
Nov 01 PHP
Symfony2针对输入时间进行查询的方法分析
Jun 28 PHP
laravel实现上传图片并在页面显示的例子
Oct 14 PHP
thinkphp框架类库扩展操作示例
Nov 26 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
调频问题解答
2021/03/01 无线电
解析php中curl_multi的应用
2013/07/17 PHP
CentOS安装php v8js教程
2015/02/26 PHP
Json_encode防止汉字转义成unicode的方法
2016/02/25 PHP
php将print_r处理后的数据还原为原始数组的解决方法
2016/11/02 PHP
php实现异步将远程链接上内容(图片或内容)写到本地的方法
2016/11/30 PHP
PHP超低内存遍历目录文件和读取超大文件的方法
2019/05/01 PHP
面向对象的Javascript之一(初识Javascript)
2012/01/20 Javascript
Javascript图像处理—平滑处理实现原理
2012/12/28 Javascript
基于pthread_create,readlink,getpid等函数的学习与总结
2013/07/17 Javascript
JavaScript中“过于”犀利地for/in循环使用示例
2013/10/22 Javascript
js淡入淡出焦点图幻灯片效果代码分享
2015/09/08 Javascript
学习JavaScript设计模式之单例模式
2016/01/19 Javascript
bootstrap-treeview实现多级树形菜单 后台JSON格式如何组织?
2019/07/26 Javascript
jQuery+PHP+Ajax实现动态数字统计展示功能
2019/12/25 jQuery
微信小程序文章列表功能完整实例
2020/06/03 Javascript
解决Vue大括号字符换行踩的坑
2020/11/09 Javascript
[40:55]DOTA2上海特级锦标赛主赛事日 - 2 败者组第二轮#4Newbee VS Fnatic
2016/03/03 DOTA
[51:36]EG vs VP 2018国际邀请赛淘汰赛BO3 第一场 8.24
2018/08/25 DOTA
python同时给两个收件人发送邮件的方法
2015/04/30 Python
Python读取键盘输入的2种方法
2015/06/16 Python
python3.5仿微软计算器程序
2020/03/30 Python
python3人脸识别的两种方法
2019/04/25 Python
Python判断字符串是否xx开始或结尾的示例
2019/08/08 Python
Python实现名片管理系统
2020/02/14 Python
Python异常原理及异常捕捉实现过程解析
2020/03/25 Python
解决keras使用cov1D函数的输入问题
2020/06/29 Python
中国海淘族值得信赖的海淘返利网站:55海淘
2017/01/16 全球购物
描述内存分配方式以及它们的区别
2016/10/15 面试题
NET程序员上机面试题
2015/05/23 面试题
村干部培训班主持词
2014/03/28 职场文书
运动会开幕式主持词
2014/03/28 职场文书
2014年管理人员工作总结
2014/12/01 职场文书
2016全国“质量月”活动标语口号
2015/12/26 职场文书
《猴王出世》教学反思
2016/02/23 职场文书
致毕业季:你如何做好自己的职业生涯规划书?
2019/07/01 职场文书