使用 XPath 按多个值过滤

Filtering by multiple values using XPath

我正在尝试按公司名称过滤 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,它总是会 return 作业。

例如,它会 return 公司 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() 也将 return 变成白色 space。

例如,如果您有这样的元素:

<company>
 Hodes
</company>

或:

<company> Hodes </company>

text() 等于“_Hodes_”。 (我将 space 替换为 _ 以使它们更容易看到。)

因为白色space,“_Hodes_”不等于“Hodes”。

使用 normalize-space() 将去除 leading/trailing 白色 space 并将多个 space 替换为单个 space.