ruby - 使用 XPath 按多个值过滤

标签 ruby xml xpath nokogiri

我正在尝试按公司名称过滤职位的 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/

相关文章:

ruby - 即使 IF 条件在 Ruby 中的计算结果为 false,如何创建局部变量?

ruby-on-rails - 载波:从 ASCII-8BIT 到 UTF-8 的编码::UndefinedConversionError ("\xFF")

ruby-on-rails - 我应该在哪里放置 RSpec 测试的种子数据?

c# - 对 XmlDocument 中的所有 XmlNode 进行排序

php - 如何确保英镑符号 (£) 正确显示?

python - python解析XML并删除容器

java - 处理混合内容的 XPath

arrays - Ruby 数组中的 `return`#map

xml - 为什么 xpath 位置选择表达式会返回多个节点?

xml - 如果所有 child 都有一个属性