zl程序教程

您现在的位置是:首页 >  其他

当前栏目

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

文档XML代码 实现 操作 解析
2023-06-13 09:14:53 时间

复制代码代码如下:


/*<?xmlversion="1.0"encoding="UTF-8"standalone="no"?>
 <!--css的样式定义,不加点。如:name{color:red;}-->
<?xml-stylesheettype="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=newDOMDocument("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("名字","年龄","介绍");
functiongetNodeVal($xmldoc,$itemsName,$nodeArr){
   $items=$xmldoc->getElementsByTagName($itemsName);
    for($i=0;$i<$items->length;$i++){
       $item=$items->item($i);
       foreach($nodeArras$node){
           $data[$i][]=$item->getElementsByTagName($node)->item(0)->nodeValue;
       }
   }
   return$data;
}

$data=getNodeVal($xmldoc,"学生",$nodeArr);
print_r($data);


复制代码代码如下:

//添加节点
$xmldoc=newDOMDocument("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=newDOMDocument("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=newDOMDocument("1.0","UTF-8");
$xml->load("dat.xml");
$xpath=newDOMXPath($xml);
$nodeList=$xpath->query("/aaa/bbb/ddd/fff");
echo$nodeList->item(0)->nodeValue;

//SimpleXML类操作xml
/*
<?xmlversion="1.0"encoding="UTF-8"?>
<books>
<bookhouse="清华出版">
<code>1001</code>
<price>200元</price>
<author>大明</author>
<title>天龙八部</title>
</book>
<bookhouse="北大出版">
<code>1002</code>
<price>321元</price>
<author>张三</author>
<title>笑傲江湖</title>
</book>
<bookhouse="人民出版">
<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($xmlas$item){
   echo$item->title,"",$item["house"],"<br/>";
}