如何使用Nokogiri在具有特定id的元素内获取值?

时间:2015-02-12 22:52:54

标签: ruby xml parsing nokogiri

我有一个由项目节点组成的元素结构,我用Nokogiri解析这个节点:

@xml.css('item').each do |item|
    # do something
end

现在该项目有一个看起来像这样的部分,每个项目都有这个带有下面id的元素):

<customfield id="customfield_10004" key="com.atlassian.jira.plugin.system.customfieldtypes:float">
    <customfieldname>Yada yada</customfieldname>
    <customfieldvalues>
        <customfieldvalue>8.0</customfieldvalue>
    </customfieldvalues>
</customfield>

我想从中解析8.0值。在另一个SO answer我发现你可以使用这样的东西(对于HTML):

item.xpath("//customfield[@id='customfield_10004']").css('customfieldvalue')

不幸的是,这似乎以相同的顺序返回所有值的字符串,而不是我正在查看的项目节点的特定值。

有没有人知道如何解析customfieldvalue节点中的float值?

2 个答案:

答案 0 :(得分:3)

您的问题是您在xpath查询开始时使用//,这告诉xpath引擎从文档的根目录开始并查找匹配的所有内容,无论您当前是什么节点。请尝试使用./

答案 1 :(得分:2)

尝试使用XPath表达式来标识元素并提取第一个匹配节点的文本:

@xml.xpath('//item').each do |item|
  path = "//customfield[@id='customfield_10004']/*/customfieldvalue"
  item.xpath(path).first.text.to_f // => 8.0, etc
end