3

相当简单的问题,但似乎很难通过搜索找到我想要的东西,这里或谷歌。

大多数人问如何选择具有多个条件的节点/元素。

喜欢URL/books[title="Harry Potter" and author="JKRowling"]

如果您对一个属性有多种可能性,我想知道是否有一种方法可以缩短该语法。

换句话说

URL/books[price=1 or price=2 or price=3 or price=8 or price=15]

有没有办法缩短该语法?

喜欢URL/books[price=1,2,3][price in (1,2,3)]----显然这些是错误的,但会使事情变得更容易。

4

1 回答 1

3

XPath 2.0 将允许

URL/books[price=(1,2,3)]

当XPath 中的一个或两个操作数都是序列时,XPath 中的=运算符(以及!=, <,和)具有隐式存在量词 -如果序列的任何成员等于序列的任何成员,则为真。请注意,这意味着不一定相同- 前者意味着存在对不相等的 X 和 Y 值(并且可能还有其他相等的对),后者意味着不存在相等的对一点也不。><=>=X = YXYX != Ynot(X = Y)

但是 XPath 1.0 不支持这样的原子值序列,它唯一的多值数据类型是节点集。如果你能以某种方式注入一个带有 XML 值列表的变量,例如

<prices>
  <price>1</price>
  <price>2</price>
  <price>3</price>
</prices>

那么你可以说

URL/books[price = $var/prices/price]

但这(a)取决于您的 XPath 引擎是否以及如何支持变量绑定,并且(b)可能不如仅枚举清楚price = 1 or price = 2 ...

于 2014-10-15T16:27:22.663 回答