我有以下XML,ID和产品描述在同一行中有两个数据,例如,纸张A4的ID = 18863,电视的ID = 18858 ......)
<products>
<product id="18863">paper A4 </product>
<product id="18858">TV Smart 12 </product>
<product id="18857">KitKat </product>
<product id="8816">Pen </product>
</products>
如何获取ID和说明(A4纸,TV Smart 12 ......)?
@doc = Nokogiri::XML(open("http://url/file.xml"))
@doc = @doc.xpath(".//products/product")
谢谢
答案 0 :(得分:1)
有多种方法可以做到这一点,但我发现最直观的方法是返回每个节点的ID和内容的哈希值。例如:
require 'nokogiri'
@doc = Nokogiri::XML <<'EOF'
<products>
<product id="18863">paper A4 </product>
<product id="18858">TV Smart 12 </product>
<product id="18857">KitKat </product>
<product id="8816">Pen </product>
</products>
EOF
@doc.xpath('//products/product').
map { |p| [p.attribute('id').value, p.content] }.to_h
这将返回一个哈希值,其中每个ID都是键,产品名称是值。例如,上面的代码返回:
{"18863"=>"paper A4 ",
"18858"=>"TV Smart 12 ",
"18857"=>"KitKat ",
"8816"=>"Pen "}
您可能希望使用p.content.strip
删除每个产品的尾随空格,但这超出了原始问题的范围。
注意:以上内容适用于Ruby 2.1.0和IRB控制台。您的里程可能因其他Ruby版本或Pry而异。
答案 1 :(得分:0)
@doc = Nokogiri::HTML(open('/test.html'))
@doc.xpath('//products/product').each do |p|
puts "#{p['id']} #{p.content}"
end
结果:
18863 paper A4
18858 TV Smart 12
18857 KitKat
8816 Pen