2013-01-12 152 views
-3

可能重复:
A simple program to CRUD node and node values of xml file
XPath and PHP: nothing works properly访问元素

$XML = <<<XML 
<items> 
    <item id="123"> 
     <name>Item 1</name> 
    </item> 
    <item id="456"> 
     <name>Item 2</name> 
    </item> 
    <item id="789"> 
     <name>Item 3</name> 
    </item> 
</items> 
XML; 

$objSimpleXML = new SimpleXMLElement($XML); 

echo $objSimpleXML->item[2]->name; // output: Item 3 (OK) 
echo '<br><pre>'; 
print_r($objSimpleXML->xpath('./item[1]/name')); // output: empty Array!!! 

您好!如何使用纯xpath查询获得“Item 3”作为输出? (我的建议输出一个空阵列。)

+2

这看起来很可疑,类似于http://stackoverflow.com/questions/14280450/xpath-and-php-nothing-works-properly/14280528#14280528。 –

回答

1

这是因为xpath集合索引是基于1的与我们最熟悉的基于0的阵列相反。

要得到Item 3使用纯xpath查询是不可能的,因为xpath function returns array。您必须首先存储结果并使用数组索引来访问元素。

$item = $objSimpleXML->xpath('./item[3]/name'); 
$str = $item[0]; 

从W3C的XPATH 1.0 spec,这些被称为predicate

一个轴或者是向前轴或反向轴。仅以文档顺序包含上下文节点或上下文节点之后的节点的轴是前向轴。仅以文档顺序包含上下文节点或上下文节点之前的节点的轴是反转轴。因此,祖先,祖先或自己,之前和之前的兄弟轴是相反的轴;所有其他轴都是正向轴。由于自我轴始终包含至多一个节点,因此无论它是正向还是反向轴都没有区别。如果轴是前进轴,则节点集的成员相对于轴的接近位置被定义为节点集中节点集的节点集的位置,并且如果轴是轴,则以反向文档顺序排序是一个反转轴。 第一个位置是1