我从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
。
有人可以指出我正确的方法和语法吗?
提前致谢。
答案 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"}
我个人更喜欢第二种解决方案,因为它为您提供了干净的哈希,但我更喜欢尽快使用哈希和数组。