XPath按值获取节点


XPath get node by value

我有这个XML:

<root>
  <experiment accessCount="1" downloadCount="1">alfa</experiment>
  <experiment accessCount="1" downloadCount="1">beta</experiment>
</root>

我想检测值为alfa的节点实验是否存在。但这段PHP代码正在向我返回所有值。

    $this->xml = simplexml_load_file("data/stats.xml") or die("Error: Cannot create object");
    $node = $this->xml->xpath("/root[experiment='alfa']");

我哪里错了?

您的XPath,

    /root[experiment='alfa']

表示:

选择包含字符串值等于'alfa'experiment元素的root元素

在您的示例中有一个这样的root元素,它包含两个experimental元素。


此XPath,

    /root/experiment[.='alfa']

表示:

选择字符串值等于'alfa'experiment元素

并将选择您要查找的一个experiment元素。

可以使用text():查询节点值

$node = $this->xml->xpath("/root/experiment[text()='alfa']");

请尝试此代码

/root/experiment[matches(.,'alfa')]

将绝对工作