使用 xPath 和联合选择节点

菲利普

我正在编写一个基于使用 xPath 操作数据的基本 HTML 报告模板系统。本质上,我需要一个 xPath 查询,如果它们有某个类,它将选择一个节点或其子节点。

$query = $xPath->query (".//*[contains(concat(' ', normalize-space(@class), ' '), ' -delete-if-no-stock ')]", $node);

据我所知,XPath的选择.//*[contains(concat(' ', normalize-space(@class), ' '), ' -delete-if-no-stock ')]是专门看着子节点的的$node参数。

我想要一个本质上询问“节点或其任何子节点”的 xPath 查询。我知道有一个联合运算符 , |,但我还没有看到如何实现它。我会想象这样的事情:.[contains(concat(' ', normalize-space(@class), ' '), ' -delete-if-no-stock ')] | .//*[contains(concat(' ', normalize-space(@class), ' '), ' -delete-if-no-stock ')]但这会产生Invalid expression错误。

总重量

Xpath 表达式用作过滤器。它们不会在那种意义上进行聚合/编译(如 SQL 联合)。

根据您要执行的操作,有几种可能性。

替代表达

管道符号|允许您指定多个表达式 - 它的工作方式类似于,CSS 选择器中的逗号

expression_one|expression_two

复杂的条件

表达式中的条件可以使用andor以及括号。

/location/path[condition and condition or condition]

Xpath 表达式有一个轴的概念,它定义了过滤器应用到的初始节点集。

axis::node[condition]

.//*是 的缩写self::node()/descendant::*这是一个名为的轴descendant-or-self,其中包括当前节点和所有后代。

descendant-or-self::*[contains(...)]

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章