我试图按公司名称过滤Jobs的XML文档。
我可以使用以下方法拉出与特定公司名称匹配的所有项目:
doc.xpath("/source/job[company[text() = 'BigCorp' or text() = 'MegaCorp']]")
我无法做相反的事情,并使用以下方法将这些值排除在外:
doc.xpath("/source/job[company[text() != 'Hodes' or text() != 'Scurri']]")
我要去哪里错了?有没有办法提供逗号分隔的值列表?
尝试将更or
改为and
:
doc.xpath("/source/job[company[text() != 'Hodes' and text() != 'Scurri']]")
如果使用or
,它将始终返回作业。
例如,它将返回公司的工作,Hodes
因为这text() != 'Scurri'
是正确的(反之亦然)。
关于以下评论:
所以
normalize-space()
做到了!doc.xpath("/source/job[company[normalize-space() != 'Hodes' and normalize-space() != 'Scurri']]")
不知道为什么?
normalize-space()
起作用的原因是因为text()
也将返回空格。
例如,如果您有一个类似的元素:
<company>
Hodes
</company>
或者:
<company> Hodes </company>
在text()
将等于“ _Hodes_
”。(我用替换了空格,_
以使它们更易于查看。)
由于存在空格,因此“ _Hodes_
”不等于“ Hodes
”。
使用normalize-space()
将删除前导/尾随空格,并用单个空格替换多个空格。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句