我正在编写一个基于使用 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
表达式中的条件可以使用and
和or
以及括号。
/location/path[condition and condition or condition]
Xpath 表达式有一个轴的概念,它定义了过滤器应用到的初始节点集。
axis::node[condition]
.//*
是 的缩写self::node()/descendant::*
。这是一个名为的轴descendant-or-self
,其中包括当前节点和所有后代。
descendant-or-self::*[contains(...)]
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句