从Xpath查询中选择单个节点

时间:2012-05-15 18:22:31

标签: php xml xpath

我正在使用此代码从xml中提取所有必需的节点:

$xml = simplexml_load_file('file.xml');

    echo "<strong>Using direct method...</strong><br />";
    $items = $xml->xpath('/w:document/w:body/w:tbl/w:tr/w:tc/w:p/w:r/w:t');
    foreach($items as $item) {
        echo "Found $item<br />";
    }

我收到了一长串参赛作品,但我需要分别选择其中任何参赛作品。试图使用echo "Found $item[2]<br />";,但收到错误:

  

Warning: main() [function.main]: Cannot add element t number 1 when only 0 such elements exist感谢您提供建议

2 个答案:

答案 0 :(得分:3)

如果要提取第二个w:t元素,请改用xpath中的索引。

$item = list($xml->xpath('(/w:document/w:body/w:tbl/w:tr/w:tc/w:p/w:r/w:t)[3]'));

注意 3表示第3个w:t元素。 Xpath索引从1而不是0开始。并且list用于获取第一个元素,因为Xpath总是返回一个数组。

另请注意此XPath可以缩减为(//w:r/w:t)[3],除非在其他位置提供相同的树。所以它看起来像

$item = list($xml->xpath('(//w:r/w:t)[3]'));

答案 1 :(得分:2)

应该是echo "found $items[2]<br />";而不是$item[2]