如何在 xpath 表达式上执行“或”而不用“|”连接两个 xpath还是使用 xpath 函数?

Posted

技术标签:

【中文标题】如何在 xpath 表达式上执行“或”而不用“|”连接两个 xpath还是使用 xpath 函数?【英文标题】:how can an "OR" be performed on an xpath expression without having to join two xpaths with a "|" or using an xpath function? 【发布时间】:2013-02-01 23:52:17 【问题描述】:

如果我想选择 /a/b1/c 和 /a/b2/c 我可以使用以下选项之一:

  /a/*[local-name()='b1' or local-name()='b2']/c
  /a/b1/c | /a/b2/c

但我想知道是否有更优雅的方式来指定“b1 或 b2”,而无需重新输入几乎整个表达式,也无需使用 local-name 函数。

很遗憾,这些表达式不起作用:

 /a/b1 or b2/c
 /a/[b1 or b2]/c
 /a/b1 | b2/c
 /a/[b1 | b2]/c

【问题讨论】:

【参考方案1】:

两个 XPath 1.0 解决方案比您的原始解决方案短一点,并且不依赖 local-name() 将是:

/a/*[self::b1 or self::b2]/c
/a/*[self::b1 | self::b2]/c

【讨论】:

【参考方案2】:

在 XPath 2 中,您可以使用:

  /a/(b1|b2)/c

还有

  /a/(b1,b2)/c

【讨论】:

以上是关于如何在 xpath 表达式上执行“或”而不用“|”连接两个 xpath还是使用 xpath 函数?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Chrome 开发者工具或 Firefox 的 Firebug 中验证 XPath 表达式?

如何编写比较两个属性或节点的 Xpath 表达式

如何使用 xpath 表达式在 PostgreSQL 中的 XML 列上创建索引?

如何在 PHP 中使用 DOM 或 XPATH 获取最近的子节点而不是嵌套的子节点

如何从 shell 执行 XPath 单行程序?

XPath 是不是对逻辑表达式进行短路评估?