我有一些XML结构如下:
<whatson>
<productions>
<production>
<category>Film</category>
</production>
<production>
<category>Business</category>
</production>
<production>
<category>Business training</category>
</production>
</productions>
</whatson>
Run Code Online (Sandbox Code Playgroud)
我需要选择一个不包含"商业"类别的每个作品(所以这只是本例中的第一个作品).
xpath有可能吗?我尝试过沿着这些方向努力但却无处可去:
//production[not(contains(category,'business'))]
Run Code Online (Sandbox Code Playgroud)
Arr*_*ran 114
XPath查询区分大小写.看了你的例子(顺便说一句,很棒,没有人似乎再提供例子了!),我只需将"业务"改为"业务"就能得到你想要的结果.
//production[not(contains(category,'Business'))]
Run Code Online (Sandbox Code Playgroud)
我已经通过在Chrome中打开XML文件并使用Developer工具执行XPath查询来测试了这一点,它给了我一些电影类别.
Lar*_*rsH 25
我需要选择不包含"商业"类别的每个作品
虽然我赞成@Arran的回答是正确的,但我还要加上这个...严格解释,OP的规范将实现为
//production[category[not(contains(., 'Business'))]]
Run Code Online (Sandbox Code Playgroud)
而不是
//production[not(contains(category, 'Business'))]
Run Code Online (Sandbox Code Playgroud)
后者选择第一个 category孩子不包含"商业"的每个生产.当a production没有category子节点或多个子节点时,两个XPath表达式的行为会有所不同.
只要每个孩子<production>只有一个<category>孩子,就像在简短的XML例子中一样,它在实践中没有任何区别.是否始终可以依赖于是否为真,取决于各种因素,例如您是否具有强制执行该约束的模式.就个人而言,我会选择更强大的选项,因为它不会"花费"太多......假设你在问题中陈述的要求是非常正确的(而不是例如'选择每个没有类别的产品)包含"商业"').
您可以使用not(expression)功能
not() 是 xpath 中的函数(与运算符相反)
例子:
//a[not(contains(@id, 'xx'))]
Run Code Online (Sandbox Code Playgroud)
或者
expression != true()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
134830 次 |
| 最近记录: |