使用 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.
我正在尝试按公司名称过滤 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.