0
我想循環遍歷每個book_list在以下xml文件中,併爲每個book_list循環每個書book_list。php和xpath - 通過特定元素的子元素循環
<inventory>
<book_list>
<book>
<author>Rowling</author>
<title>Harry Potter</title>
</book>
<book>
<author>Blyton</author>
<title>Famous 5</title>
</book>
</book_list>
<book_list>
<book>
<author>Bloggs</author>
<title>Learning XML</title>
</book>
<book>
<author>Jones</author>
<title>Beginning PHP</title>
</book>
</book_list>
</inventory>
對於每個book_list,我如何使用php simplexml腳本中的xpath遍歷每本書?這裏是我的代碼,
$booklistpath = $xml->xpath('//booklist');
foreach($booklistpath as $booklist){
$bookpath = $xml->xpath('//book');
foreach($bookpath as $book){
...
}
}
第一個循環是好的,它通過每個book_list - 但嵌套循環,其目的是要通過每本書針對特定book_list經過每本書的整個文件內。我也試過: -
'.//book' and
'descendant::book'
感謝您的幫助 - 任何想法如何做到這一點時,有一個命名空間?我的真實數據有一個命名空間這樣的: - 這需要 的foreach($ booklist-> NS:本書作爲$書){等 這會導致一個PHP解析錯誤 –
lorac
2013-04-29 16:28:05
當然,使用* * [SimpleXMLElement :: registerXPathNamespace](http://php.net/manual/en/simplexmlelement.registerxpathnamespace.php)**函數。看看這個來加快速度:http://stackoverflow.com/questions/595946/parse-xml-with-namespace-using-simplexml。 – 2013-04-29 16:33:25
使用' - > children()'方法選擇名稱空間;在你的示例'foreach($ booklist-> children('ns',true) - > book as $ book)'中。在這種情況下,不需要XPath,這正是SimpleXML訪問方法所做的。 – IMSoP 2013-04-29 19:47:52