我有一个XML文件,我需要解析它,并且只能通过其SKU获取一个产品。
每个产品属性都包含 CDATA 块中的文本。
XML 文件是:
<products>
<product>
<name>
<![CDATA[
name1
]]>
</name>
<price>
<![CDATA[
Price1
]]>
</price>
<SKU>
<![CDATA[
p-1
]]>
</SKU>
</product>
<product>
<name>
<![CDATA[
name2
]]>
</name>
<price>
<![CDATA[
Price2
]]>
</price>
<SKU>
<![CDATA[
p-2
]]>
</SKU>
</product>
...
</products>
如何获得哈希格式的产品
{:name => 'name2', :price => 'price2', :sku => 'p-2'}
如果我只有@sku='p-2'
?
不用担心 CDATA,Nokogiri 可以处理它。您可以简单地迭代所有<product>
,并且对于每个子项,迭代其子项(在下面的代码中,我将子项限制为仅其中的三个(。
doc = Nokogiri::XML(xml)
out = []
doc.xpath('//products/product').each do |product|
h = {}
product.xpath('name | price | SKU').each do |child|
h["#{child.name}"] = child.text.strip
end
out << h
end
结果是一个哈希数组:
[{"name"=>"name1", "price"=>"Price1", "SKU"=>"p-1"},
{"name"=>"name2", "price"=>"Price2", "SKU"=>"p-2"}]