我可以使用.//div/h1/text() | .//div/h2/text()
选择几条路径。但是,我想知道是否有一种方法可以在不每次都明确写出两条路径(在这种情况下.//div/
)通用的部分的情况下做到这一点?
至于快捷方式,使用 XPath 2.0,您可以缩短例如 //div/h1 | //div/h2
例如 //div/(h1 | h2)
但 XPath 1.0 中不允许使用这种语法。我认为 XPath 3.0 将引入一个let
子句来定义变量。所以我认为你可以做例如 let $r := /html/body/div[3]/table[2]/tbody/tr[5] return ($r/span | $r/a)
.
或者,对于使用 XPath 2.0 校正的样本,您可以将.//div/h1/text() | .//div/h2/text()
缩短为 .//div/(h1/text() | h2/text())
。但是使用 XPath 1.0,您所能做的就是使用 .//div/*[self::h1 | self::h2]/text()
.
使用:
.//div/*[self::h1 or self::h2]/text()
在 Xpath 2.0 中,可以使用:
.//div/(h1|h2)/text()
.//div/*[(local-name() = 'h1') or (local-name() = 'h2')]/text()
应该做这个技巧