我有以下XML
<CallResult>
<Success>true</Success>
<Result>
<ZoneInfo>
<Id>3</Id>
<Name>test-room</Name>
<NId>sdfsdg</NId>
</ZoneInfo>
<ZoneInfo>
<Id>16</Id>
<Name>Dynamic</Name>
<NId>sadadrwed543th</NId>
</ZoneInfo>
<ZoneInfo>
<Id>32</Id>
<Name>lobby</Name>
<NId>ssdfrgfdfg</NId>
</ZoneInfo>
<ZoneInfo>
<Id>33</Id>
<Name>conf</Name>
<NId>sdfsfewr232f</NId>
</ZoneInfo>
</Result>
<Message>Success</Message>
</CallResult>
我正在尝试解析XML,以便每个不同的“ZoneInfo”属性都是数组中的哈希值。
E.g。
区域[0] =哈希[Id =&gt; 32,Name =&gt; lobby,NId =&gt; ssdfrgfdfg]
区域[1] =哈希[Id =&gt; 33,姓名=&gt; conf,NId =&gt; sdfsfewr232f] 等...
我有限的XML解析知识已成为一个问题。我真正知道的是如何提取单个元素。 E.g。
doc = REXML::Document.new(xmlData)
doc.elements.each("CallResult/Success") do |ele|
p ele.text;
end
有人可以提供一些关于如何循环从每个'ZoneInfo'元素中提取信息的更多信息吗?
由于
答案 0 :(得分:2)
你只需要使用nori gem
require 'nori'
your_hash = Nori.parse(your_xml)
然后,如果您需要以这种方式存储数据,那么将此嵌套哈希转换为哈希数组应该是直截了当的。
如果您需要更多信息,api doc就在这里 - http://rubydoc.info/gems/nori/1.1.3/frames
答案 1 :(得分:1)
我使用另一个gem'nokogiri',也许是现在解析HTML / XML的最佳宝石。
require 'nokogiri'
str = "<CallResult> ......"
doc = Nokogiri.XML(str)
Zones = []
doc.xpath('//ZoneInfo').each do |zone|
Zones << { "Id" => zone.xpath('Id').text, "Name" => zone.xpath('Name').text, "NId" => zone.xpath("NId").text}
end