2

私は次の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>

それぞれの異なる「ZoneInfo」属性が配列内のハッシュになるように、XML を解析しようとしています。

例えば

ゾーン[0] = ハッシュ[ID => 32、名前 => ロビー、NId => ssdfrgfdfg]

ゾーン[1] = ハッシュ[ID => 33、名前 => conf、NId => sdfsfewr232f] など...

私の限られた XML 構文解析の知識が役に立ちました。私が本当に知っているのは、単一の要素を抽出する方法だけです。例えば

doc = REXML::Document.new(xmlData)
doc.elements.each("CallResult/Success") do |ele|
  p ele.text;
end

各「ZoneInfo」要素から情報を抽出するだけでループする方法について、誰かがさらに情報を提供してくれますか?

ありがとう

4

2 に答える 2

2

私は別の gem 'nokogiri' を使用しています。これは、おそらく HTML/XML を解析するのに最適な gem です。

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
于 2012-08-24T13:11:28.013 に答える
2

海苔ジェムを使えばいいだけ

require 'nori'
your_hash = Nori.parse(your_xml)

そして、データをそのように保存する必要がある場合は、このネストされたハッシュをハッシュの配列に変換するのは簡単です。

さらに詳しい情報が必要な場合は、API ドキュメントがここにあります - http://rubydoc.info/gems/nori/1.1.3/frames

于 2012-08-24T16:05:30.127 に答える