實例 用DOM獲取下列xml文檔中所有金庸小說的書名,該xml文檔所在位置為 ./books.xml:
代碼如下 復制代碼<?xmlversion="1.0"encoding="utf-8"?>
<root>
<book>
<title>天龍八部</title>
<author>金庸</author>
</book>
<book>
<title>陸小鳳</title>
<author>古龍</author>
</book>
<book>
<title>倚天屠龍記</title>
<author>金庸</author>
</book>
<book>
<title>西游記</title>
<author>吳承恩</author>
</book>
<book>
<title>神雕俠侶</title>
<author>金庸</author>
</book>
<book>
<title>射雕英雄傳</title>
<author>金庸</author>
</book>
</root>
用DOM代碼實現:
DOM讀取xml文檔步驟:1、創建DOM對象——》2、載入DOM文檔內容——》3、截取要讀取內容所在的標簽——》獲得要讀取的內容。
代碼如下 復制代碼header('Content-type:text/html;charset=utf-8');
$arr=array();
$dom=newDOMDocument();//創建DOM對象
$dom->load('./books.xml');//載入xml文檔
print_r($dom);
echo'<hr>';
$dom=$dom->getElementsByTagName('book');//截取標簽
for($i=0;$i<$dom->length;$i++){
if($dom->item($i)->childNodes->item(1)->childNodes->item(0)->wholeText=='金庸'){
$arr[] =$dom->item($i)->childNodes->item(0)->childNodes->item(0)->wholeText.'<br />';//獲取內容
}
}
print_r($arr);
使用 getElementsByTagName 和 childNodes 後返回的都是對象,所以它們後面必須使用 item(int),哪怕它們返回的對象裡面只包含一個項目,也必須用item(0)來指定,否則就會出錯。
用simplexml代碼實現:
代碼如下 復制代碼$simxml= simplexml_load_file('./books.xml');
$t=$simxml->book;
$arr=array();
foreach($tas$v){
if($v->author=='金庸'){
$arr[] = (string)$v->title;
}
}
print_r($arr);
使用 simplexml_load_file 後返回的是對象,該對象裡的項目既有對象又有數組,不管是對象還是數組,要循環裡面的內容都可以用 foreach。該實例最後獲取的內容 $v->title 其實是個對象,所以要用 string 轉化為字符串。