我想遍历以下xml文件中的每个book_list,并希望遍历该book_list的每本书的每个book_list。

<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遍历每个book_list遍历整个文档中的每一本书)。我也尝试过:-

'.//book'  and
'descendant::book'

最佳答案

这是正确的结果,因为您正在原始xpath上使用第二个$xml调用,该调用是整个XML文档的SimpleXMLElement。

要获取每个书目表的书,只需对其进行如下迭代:

$booklists = $sxe->xpath('//book_list');

foreach ($booklists as $booklist) {
    foreach ($booklist->book as $book) {
        echo $book->asXML();
    }
}

10-05 21:16
查看更多