如何使用不包含()中的XPath?(How to use not contains() in xpa

2019-06-25 11:17发布

我有一些的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'))]

Answer 1:

XPath查询是区分大小写的。 说完看着你的榜样(其中,顺便说一句,是真棒,似乎没有人提供的例子了!),我就可以通过改变“业务”得到的结果你想要的,“第一财经”

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

我已经打开Chrome浏览器的XML文件,并使用Developer工具来执行XPath查询进行了测试,它给了我只是电影类别回来。



Answer 2:

我需要选择一个类别每一个生产不包含“业务”

虽然我upvoted @艾伦的答案是正确的,我也想补充一点......严格解释,在OP的规范将被实现为

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

而不是

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

后者选择每一个生产其第一 category孩子不包含“业务”。 这两个XPath表达式将不同的行为,当productioncategory孩子,或不止一个。

它没有在实践中任何区别,只要每<production>只能有一个<category>的孩子,在你的短例如XML。 无论你总是可以指望这是真的还是假的,取决于多种因素,如是否有强制执行约束的模式。 就个人而言,我会去为更稳健的选择,因为它没有“成本”太大......假设你的要求,因为在这个问题说真的是正确的(而不是如“选择所有生产不具有的类别包含“业务”“)。



Answer 3:

您可以使用not(expression)功能

not()是在XPath中函数(相对于操作者)

例:

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

要么

expression != true()


Answer 4:

应该是//生产[不是(包含(类别, '业务'))]



文章来源: How to use not contains() in xpath?