通过SimpleXMLElement和XPath(PHP)访问元素


Access elements via SimpleXMLElement and XPath (PHP)

可能重复:
一个简单的程序来CRUD节点和xml文件的节点值
XPath和PHP:没有什么能正常工作

$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查询获得"Item3"作为输出?(我的提议输出一个空数组。(

这是因为xpath集合索引是基于1的,而不是我们最熟悉的基于0的数组。

使用纯xpath查询获取Item 3是不可能的,因为xpath函数返回数组。您必须先存储结果,然后使用数组索引来访问元素。

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

根据W3C的XPATH 1.0规范,这些被称为谓词

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