【问题标题】:XML Xpath - select where element = multiple valuesXML Xpath - 选择元素 = 多个值的位置
【发布时间】:2014-12-10 19:23:23
【问题描述】:

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

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

点赞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)] ---- 显然这些是错误的,但会让事情变得更容易。

【问题讨论】:

    标签: xml xpath multiple-conditions


    【解决方案1】:

    XPath 2.0 允许

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

    XPath 中的= 运算符(以及!=、<、>、<= 和>=)在其操作数之一或两个都是序列时具有隐式存在量词 - @987654328如果序列X 的any 成员等于序列Y 的any 成员,@ 为真。请注意,这意味着 X != Y 不一定与 not(X = Y) 相同 - 前者意味着存在 一些 对不相等的 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 ... 清晰。

    【讨论】:

    • 非常感谢。我确定我实际上使用的是最新版本 - 所以你的第一行是有道理的 - 我只是不知道语法,因为它似乎没有出现在我进行的搜索中。我会支持你,但我想我还没有 15 个代表
    • @JohnBabson 您还没有代表投票,但如果您认为它解决了您的问题,您可以接受答案。您可以通过单击答案左侧的勾号来执行此操作。
    猜你喜欢
    • 1970-01-01
    • 2017-11-22
    • 1970-01-01
    • 2016-01-14
    • 1970-01-01
    • 2022-10-14
    • 2015-06-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多