XPath 按值获取节点

Pav*_*aka 5 php xml xpath

我有这个 XML:

<root>
  <experiment accessCount="1" downloadCount="1">alfa</experiment>
  <experiment accessCount="1" downloadCount="1">beta</experiment>
</root>
Run Code Online (Sandbox Code Playgroud)

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

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

我哪里错了?

kjh*_*hes 5

你的 XPath,

    /root[experiment='alfa']
Run Code Online (Sandbox Code Playgroud)

说:

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

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


这个 XPath,

    /root/experiment[.='alfa']
Run Code Online (Sandbox Code Playgroud)

说:

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

并会选择您寻找的一个experiment元素。


小智 0

您可以使用以下命令查询节点值text()

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

  • 请注意这个答案与另一个答案之间的细微差别。使用 `.` 将组合(它组合是因为 `=` 运算符强制原子化)所有子项,无论深度如何,使用 `text()` 将仅组合第一级文本子项。如果您必须处理“实验”元素中的混合内容,这一点可能很重要。 (2认同)