使用 Nokogiri 通过 CDATA 属性查找 XML 文件中的元素



我有一个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"}]

相关内容

  • 没有找到相关文章

最新更新