如何在XML中查找文本并使用Nokogiri显示其兄弟?

时间:2012-03-10 23:19:55

标签: ruby-on-rails dom syntax xml-parsing nokogiri

我从REST API中获取了以下XML:

<dataitems>
  <dataitem colour="null">
     <value>
        <label>Intel</label>
        <count>43</count>
     </value>
     <value>
        <label>AMD</label>
        <count>39</count>
     </value>
     <value>
        <label>ARM</label>
        <count>28</count>
     </value>
  </dataitem>
</dataitems>

我想在<label>标记中搜索文字,并在表格中显示<count>的匹配值。

在控制器中我有:@post_count = Nokogiri::XML(Post.item_data.to_xml)

在视图中,我不确定是否需要使用@post_count.xpath@post_count.search

有人可以指出我正确的方法和语法吗?

提前致谢。

1 个答案:

答案 0 :(得分:4)

虽然我不确定您要查找哪些信息,但我有一些建议。

1)如果您在搜索之前知道元素中的值:

doc = Nokogiri.XML(open(source_xml))

# Assuming there is only one of each label
node = doc.xpath('//label[text()="Intel"]').first
count = node.next_element.text

# or if there are many of each label
nodes = doc.xpath('//label[text()="Intel"]')
nodes.each {|node|
  count = node.next_element.text
  # do something with count here
}

2)假设你事先不知道标签中的名字

doc = Nokogiri.XML(open(source_xml))
labels = {}
doc.xpath('//label').each {|node|
  labels[node.text] = node.next_element.text
}

# labels => {"Intel"=>"43", "AMD"=>"39", "ARM"=>"28"}

我个人更喜欢第二种解决方案,因为它为您提供了干净的哈希,但我更喜欢尽快使用哈希和数组。