我有一些的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查询是区分大小写的。 说完看着你的榜样(其中,顺便说一句,是真棒,似乎没有人提供的例子了!),我就可以通过改变“业务”得到的结果你想要的,“第一财经”
//production[not(contains(category,'Business'))]
我已经打开Chrome浏览器的XML文件,并使用Developer工具来执行XPath查询进行了测试,它给了我只是电影类别回来。
我需要选择一个类别每一个生产不包含“业务”
虽然我upvoted @艾伦的答案是正确的,我也想补充一点......严格解释,在OP的规范将被实现为
//production[category[not(contains(., 'Business'))]]
而不是
//production[not(contains(category, 'Business'))]
后者选择每一个生产其第一 category
孩子不包含“业务”。 这两个XPath表达式将不同的行为,当production
无category
孩子,或不止一个。
它没有在实践中任何区别,只要每<production>
只能有一个<category>
的孩子,在你的短例如XML。 无论你总是可以指望这是真的还是假的,取决于多种因素,如是否有强制执行约束的模式。 就个人而言,我会去为更稳健的选择,因为它没有“成本”太大......假设你的要求,因为在这个问题说真的是正确的(而不是如“选择所有生产不具有的类别包含“业务”“)。
您可以使用not(expression)
功能
not()
是在XPath中函数(相对于操作者)
例:
//a[not(contains(@id, 'xx'))]
要么
expression != true()
应该是//生产[不是(包含(类别, '业务'))]