2012-05-15 46 views
0

我使用此代码提取XML中的所有所需的节点:选择Xpath查询单节点

$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 />"; 
    } 

我得到的条目的一个长长的清单,但我需要可能性seperately选择其中的任何。试图用echo "Found $item[2]<br />";但得到的错误:

Warning: main() [function.main]: Cannot add element t number 1 when only 0 such elements exist thanks for advices

+0

那岂不是'回声 “发现$项目[2]
”;'而不是'$项目[2]'? – ametren

+0

它的工作!谢谢 –

+0

太棒了!我会将其作为答案发布。 – ametren

回答

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意味着第三w:t元件。 Xpath索引从1开始,而不是0。并且list用于获取第一个元素,因为Xpath始终返回一个数组。

另请注意此XPath可以减少到(//w:r/w:t)[3],除非在其他地方有相同的树。所以它看起来像

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

+1,但整个事情需要在这样的parens? – ametren

+0

是的,为此,您需要将括号放在整个xpath查询中。 –

2

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