【问题标题】:How to use not contains() in XPath?如何在 XPath 中使用 not contains()?
【发布时间】:2012-06-16 22:53:36
【问题描述】:

我有一些结构如下的 XML:

<whatson>
  <productions>    
    <production>
      <category>Film</category>
    </production>
    <production>
      <category>Business</category>
    </production>
    <production>
      <category>Business training</category>
    </production>
  </productions>
</whatson>

而且我需要选择每个类别不包含“业务”的作品(因此在本例中只选择第一个作品)。

这对 XPath 可行吗?我尝试按照这些思路工作,但一无所获:

//production[not(contains(category,'business'))]

【问题讨论】:

    标签: xpath contains


    【解决方案1】:

    XPath 查询区分大小写。看了你的例子(顺便说一句,这很棒,似乎没有人再提供例子了!),我可以通过将“业务”更改为“业务”来获得您想要的结果

    //production[not(contains(category,'Business'))]
    

    我已经通过在 Chrome 中打开 XML 文件并使用开发者工具执行 XPath 查询进行了测试,它只返回了电影类别。

    【讨论】:

    • 感谢您在 Chrome 中打开 XML 并使用开发人员工具验证 XPath 是否有效的建议!我只是想找一个在线检查器,你的建议要简单得多。
    • 你可以在没有包含的情况下使用 //production[not(@category='Business')] 吗?
    • @YiXiangChong 如果您不想进行包含搜索,当然可以,但这篇原始帖子正在执行包含搜索(因为并非所有元素都明确等于“业务”)
    【解决方案2】:

    我需要选择每个类别不包含“业务”的作品

    虽然我赞成@Arran 的回答是正确的,但我也会添加这个... 严格解释,OP 的规范将被实现为

    //production[category[not(contains(., 'Business'))]]
    

    而不是

    //production[not(contains(category, 'Business'))]
    

    后者选择 first category 子级不包含“Business”的每个产品。当 production 没有 category 子代或多个子代时,这两个 XPath 表达式的行为会有所不同。

    只要每个&lt;production&gt; 恰好有一个&lt;category&gt; 子级,这在实践中没有任何区别,就像在您的简短示例XML 中一样。您是否总是可以指望这是否正确,取决于各种因素,例如您是否有一个实施该约束的模式。就个人而言,我会选择更强大的选项,因为它不会“花费”太多......假设问题中所述的要求确实正确(而不是例如'选择没有类别的每个产品包含“业务”')。

    【讨论】:

    • @LoamyHound:感谢指正!两年多后,我终于看到了你的答案,并修复了丢失的括号。
    【解决方案3】:

    你可以使用not(expression)函数

    not() 是 xpath 中的函数(与运算符相对)

    例子:

    //a[not(contains(@id, 'xx'))]
    

    expression != true()
    

    【讨论】:

      【解决方案4】:

      应该是没有 contains() 方法的 xpath,//production[not(contains(category,'business'))]

      【讨论】:

        猜你喜欢
        • 2018-12-05
        • 1970-01-01
        • 1970-01-01
        • 2010-11-07
        • 2010-12-05
        • 2012-01-23
        • 1970-01-01
        • 2012-02-19
        相关资源
        最近更新 更多