我正在尝试按公司名称过滤职位的 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']]")
如果您使用或
,它总是会返回作业。
例如,它会返回 Hodes
公司的工作,因为 text() != 'Scurri'
为真(反之亦然)。
关于以下评论:
so
normalize-space()
did it!doc.xpath("/source/job[company[normalize-space() != 'Hodes' and normalize-space() != 'Scurri']]")
not sure why?
normalize-space()
起作用的原因是 text()
也将返回空白。
例如,如果您有这样一个元素:
<company>
Hodes
</company>
或:
<company> Hodes </company>
text()
将等于“_Hodes_
”。 (我将空格替换为 _
以便于查看。)
由于空格,“_Hodes_
”不等于“Hodes
”。
使用 normalize-space()
将去除前导/尾随空格并将多个空格替换为一个空格。
关于ruby - 使用 XPath 按多个值过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36655778/