我正在尝试按公司名称过滤作业的XML文档。
我可以使用以下方式提取与特定公司名称匹配的所有项目:
doc.xpath("/source/job[company[text() = 'BigCorp' or text() = 'MegaCorp']]")
我无法做相反的事情并使用以下内容排除这些值:
doc.xpath("/source/job[company[text() != 'Hodes' or text() != 'Scurri']]")
我哪里错了?有没有办法提供以逗号分隔的值列表?
答案 0 :(得分:3)
尝试将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()
等于&#34; _Hodes_
&#34;。 (我用_
替换了空格,以便更容易看到。)
由于空白,&#34; _Hodes_
&#34;不等于&#34; Hodes
&#34;。
使用normalize-space()
将删除前导/尾随空格,并用一个空格替换多个空格。