首页 > 编程 > PHP > 正文

解析php DOMElement 操作xml 文档的实现代码

2020-03-22 16:54:41
字体:
来源:转载
供稿:网友
复制代码 代码如下:
/* ?xml version="1.0" encoding="UTF-8" standalone="no"?
!-- css的样式定义,不加点。如:name{color:red;} --
?xml-stylesheet type="text/css" href="css.css"?
!-- 引入dtd文档定义文件 (根元素:班级) !DOCTYPE 班级 SYSTEM "html' target='_blank'>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教程

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表