XPath 谓词中的“或”运算符?

Posted

技术标签:

【中文标题】XPath 谓词中的“或”运算符?【英文标题】:'OR' operator in XPath predicate? 【发布时间】:2011-01-13 18:40:42 【问题描述】:

type="application/rss+xml" 选择<link> 元素的XPath 表达式是什么OR type="application/atom+xml"(RSS 和Atom 提要)

link[@rel='alternate'][@type='application/rss+xml'] 选择 RSS 源 link[@rel='alternate'][@type='application/atom+xml'] 选择 Atom 提要

但是选择它们的单个 XPath 表达式是什么?

谢谢。

【问题讨论】:

【参考方案1】:

使用:

link[@rel='alternate'][@type='application/rss+xml' or @type='application/atom+xml'] 

见http://www.w3.org/TR/xpath/#NT-OrExpr

你也可以使用 union 来完成这个

link[@rel='alternate'][@type='application/rss+xml']|link[@rel='alternate'][@type='application/atom+xml']

但是or 可以。

【讨论】:

【参考方案2】:

如果您想花哨并使用 XPath 2.0,这样写会更优雅(但可能会令人困惑,具体取决于可能正在阅读代码的人):

link[@rel='alternate'][@type = ('application/rss+xml', 'application/atom+xml')] 

原因是 XPath 2.0 重新定义了 '=' 以应用于序列,这意味着在比较左侧序列中的项目与比较右侧的项目时,如果有一个匹配项,则上述比较返回 true顺序。如果您要比较的事物列表是动态的,这将非常有用。

【讨论】:

以上是关于XPath 谓词中的“或”运算符?的主要内容,如果未能解决你的问题,请参考以下文章

数据库系统原理作业七数据查询中的嵌套查询

XPath 运算符

使用 XPath 谓词优化 XQuery 查询

NSPredicate 谓词

markdown 一份报告显示了eXist实现XPath&XQuery函数和运算符规范中的函数签名不匹配

T-SQL:谓词和运算符