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