1. 程式人生 > >PHP解析xml

PHP解析xml

加載xml文件 simple dtd document cti nod 嵌入 實例 urn

1.xml實例

test.xml

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE 班級 SYSTEM "test.dtd">
<!--<!DOCTYPE 班級 [
<!Element 班級 (學生+)>
<!Element 學生 (name,age,sex)>
<!Element name (#PCDATA)>
<!Element age (#PCDATA)>
<!Element sex (#PCDATA)>
]>-->
<班級>
<學生>
//在CDATA中可以嵌入任何內容,包括圖片。
//在默認情況下,只要符合書寫語法,瀏覽器不會去檢驗是否符合邏輯,我們需要自己寫代碼測試。
<!--<name>悟空&quot;&apos;&lt;&gt;</name>
<![CDATA[<age>500><‘ ""</age>]]>-->
<name>悟空</name>
<age>500</age>
<sex>男</sex>
//人不可能有面積屬性,不符合邏輯。
<面積>500</面積>
</學生>
<學生>
<name>白骨精</name>
<age>1000</age>
<sex>女</sex>
</學生>
</班級>

test.dtd

<!Element 班級 (學生+)>
<!Element 學生 (name,age,sex)>
<!Element name (#PCDATA)>
<!Element age (#PCDATA)>
<!Element sex (#PCDATA)>

checkDtd.html

<html>
<head>
<title>測試dtd</title>
<meta http-equiv="content-type"content="text/html;charset=utf-8"/>
<script type="text/javascript">
//創建一個xml解析器
var xmldoc=new ActiveXObject("Microsoft.XMLDOM");
//開啟校驗功能
xmldoc.validateOnParse=true;
//指定對哪一個xml文件進行校驗
xmldoc.load("test.xml");
//如有錯誤,則輸出
document.write("錯誤信息"+xmldoc.parseError.reason+"<br/>");
document.write("錯誤信息="+xmldoc.parseError.line+"<br/>");
</script>
</head>
</html>

此檢測dtd的方法只適用於IE瀏覽器,是IE瀏覽器特有的屬性,其他瀏覽器不支持。

2.php技術操作xml文件

  *php dom

  *php結合xpath操作xml

  *SimpleXml

//phpdom解析xml

test.xml

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE 班級 SYSTEM "test.dtd">
<!--<!DOCTYPE 班級 [
<!Element 班級 (學生+)>
<!Element 學生 (name,age,sex)>
<!Element name (#PCDATA)>
<!Element age (#PCDATA)>
<!Element sex (#PCDATA)>
]>-->
<班級>
<學生>
<name>0</name>
<age>25</age>
<sex>男</sex>
</學生>
<學生>
<name>0</name>
<age>25</age>
<sex>男</sex>
</學生>
<學生>
<name>0</name>
<age>25</age>
<sex>男</sex>
</學生>
</班級>

phpdom.php

<html>
<head>
<meta http-equiv="content-type"content="text/html charset=utf-8"/>
</head>
<?php
//獲取Domdocument對象。
$xmldoc=new DOMDocument();
//指定要處理的xml文件,加載xml文件
$xmldoc->load("test.xml");
//希望獲取每一個學生的名字
$students=$xmldoc->getElementsByTagName("學生");
echo $students->length;
for($i=0;$i<$students->length;$i++){
$node=$students->item($i);
echo getNodeValue($node,"name")."<br/>";
echo getNodeValue($node,"age")."<br/>";
echo getNodeValue($node,"sex")."<br/>";
}
//$node=$students->item(0);
/*$list=$node->getElementsByTagName("name");
$list1=$list->item(0)->nodeValue;
echo $list1;*/
//echo getNodeValue($node,"age");
function getNodeValue(&$node,$tagName){
return $node->getElementsByTagName($tagName)->item(0)->nodeValue;
}

?>
</html>

//增加節點的操作代碼

addNode.php

<html>
<head>
<meta http-equiv="content-type"content="text/html charset=utf-8"/>
</head>
<?php
//獲取Domdocument對象。
$xmldoc=new DOMDocument();
//指定要處理的xml文件,加載xml文件
$xmldoc->load("test.xml");
//希望獲取每一個學生的名字
$root=$xmldoc->getElementsByTagName("班級")->item(0);
//創建一個學生節點
$name=$xmldoc->createElement("學生");
//創建一個名字節點
$name1=$xmldoc->createElement("name");
//給名字節點賦值
$name1->nodeValue="鑫鑫";
//把名字節點掛載到學生節點之下
$name->appendChild($name1);
//創建年齡節點
$name2=$xmldoc->createElement("age");
//給年齡節點賦值
$name2->nodeValue="25";
//將年齡節點掛載到學生節點之下
$name->appendChild($name2);
//創建性別節點
$name3=$xmldoc->createElement("sex");
//給性別節點賦值
$name3->nodeValue="男";
//將性別節點掛載到學生節點之下
$name->appendChild($name3);
//最後將學生節點掛載到根節點班級之下
$root->appendChild($name);
//回寫入xml文件
$xmldoc->save("test.xml");
?>
</html>

//刪除節點的操作

<html>
<head>
<meta http-equiv="content-type"content="text/html charset=utf-8"/>
</head>
<?php
//獲取Domdocument對象。
$xmldoc=new DOMDocument();
$xmldoc->load("test.xml");
//獲取根節點
$root=$xmldoc->getElementsByTagName("班級")->item(0);
//要刪除第3個學生
//獲取學生節點
$students=$xmldoc->getElementsByTagName("學生");
//獲取第三個學生
$stu1=$students->item(0);
//刪除第三個學生
//$root->removeChild($stu1);
$stu1->parentNode->removeChild($stu1);
$xmldoc->save("test.xml");
echo "刪除成功";
?>
</html>

//更新節點內容的操作

<html>
<head>
<meta http-equiv="content-type"content="text/html charset=utf-8"/>
</head>
<?php
//獲取Domdocument對象。
$xmldoc=new DOMDocument();
$xmldoc->load("test.xml");
//獲取學生節點
$student=$xmldoc->getElementsByTagName("學生")->item(0);
//獲取第三個學生
$stu_name=$student->getElementsByTagName("name")->item(0);
//更新文本的值
$stu_name->nodeValue+="八戒";
$xmldoc->save("test.xml");
echo "更新成功";
?>
</html>

與Java解析xml相比之下,利用PHP解析xml要簡單一些,更容易讓人理解。

今日暫時分享於此。明日繼續。

革命尚未成功,同誌仍需努力!

PHP解析xml