如何在ruby中将XML转换为Hash?

时间:2016-10-15 12:22:37

标签: ruby-on-rails ruby xml hash

我有一个XML代码,我想将其转换为Hash

   <meta_description><language id="1"></language><language id="2"></language></meta_description>
    <meta_keywords><language id="1"></language><language id="2"></language></meta_keywords>
    <meta_title><language id="1"></language><language id="2" ></language></meta_title>
    <link_rewrite><language id="1" >konsult-500-krtim</language><language id="2" >konsult-500-krtim</language></link_rewrite>
    <name><language id="1" >Konsult 500 kr/tim</language><language id="2" >Konsult 500 kr/tim</language></name>
    <description><language id="1" ></language><language id="2" ></language></description>
    <description_short><language id="1" ></language><language id="2" ></language></description_short>
    <available_now><language id="1" ></language><language id="2" ></language></available_now>
    <available_later><language id="1" ></language><language id="2" ></language></available_later>
    <associations>
    <categories nodeType="category" api="categories">
    <category>
    <id>2</id>
    </category>
    </categories>
    <images nodeType="image" api="images"/>
    <combinations nodeType="combination" api="combinations"/>
    <product_option_values nodeType="product_option_value" api="product_option_values"/>
    <product_features nodeType="product_feature" api="product_features"/>
    <tags nodeType="tag" api="tags"/>
    <stock_availables nodeType="stock_available" api="stock_availables">
    <stock_available>
    <id>111</id>
    <id_product_attribute>0</id_product_attribute>
    </stock_available>
    </stock_availables>
    <accessories nodeType="product" api="products"/>
    <product_bundle nodeType="product" api="products"/>
    </associations>

我想将此xml转换为Hash。 我尝试找到将此xml转换为h=Hash.new的函数 我是怎么做到的?

4 个答案:

答案 0 :(得分:2)

您可以使用ActiveSupport的Hash#from_xml方法:

xml = File.open("data.xml").read # if your xml is in the 'data.xml' file
Hash.from_xml(xml)

答案 1 :(得分:0)

如果您使用的是Rails,则可以使用上面提供的答案,否则,您可以使用ActiveSuppport gem:

require 'active_support/core_ext/hash'

xml = <foo>bar</foo>
hash = Hash.from_xml(xml)
=>{"foo"=>"bar"}

答案 2 :(得分:0)

使用nokogiri解析对ruby哈希的XML响应。非常快。

require 'active_support/core_ext/hash'  #from_xml 
require 'nokogiri'

doc = Nokogiri::XML(response_body)
Hash.from_xml(doc.to_s)

答案 3 :(得分:-1)

nokogiri是一个功能强大的gem,可用于解析xml / html文件

gem 'nokogiri'添加到Gemfile并将其捆绑以使用nokogiri来解析您可以写入哈希值的xml数据。

require 'nokogiri'

# parse xml FILE: store your xml content on a file and read
data = File.open("data.xml") { |f| Nokogiri::XML(f) }

# parse STRING xml content
data  = Nokogiri::XML('<meta><language id="1">EN</language></meta>')

点击链接获取详细说明 parsing xml with nokogiri