1

次のような XML ドキュメントがあります。

<permit>
  <id>1</id>
  <inspection>
    <amount>100</amount>
    <type>pool</type>  
  </inspection>
  <inspection>
    <amount>400</amount>
    <type>pluminbing</type>  
  </inspection>
</permit>
<permit>
  <id>2</id>
  <inspection>
    <amount>1500</amount>
    <type>roof</type>  
  </inspection>
  <inspection>
    <amount>1700</amount>
    <type>building</type>  
  </inspection>
</permit>

次のように、許可をループして ID を取り出すことができることを知っています。

 REXML::XPath.each(doc, '//permit') do |permit|
   permit_hash = {:id => permit.elements['id'].text}
 end

しかし、各許可証の検査をループして、最終的に次のような配列出力を取得できないようです。

 permits = [{:id => 1, :inspections => [{:amount => 100, :type => 'pool'}, {:amount =>   400, :type => 'plumbing'}]}, {:id => 2, :inspections => [{:amount => 1500, :type => 'roof'}, {:amount => 1700, :type => 'building'}]}]

私が試みるすべてのことは、許可ごとの検査だけでなく、すべての検査を受けるようです。

提案?

4

1 に答える 1

1

私も同じ問題を抱えていました。私は自分のコードでこれを試しましたが、うまくいきました。(私はあなたのものを使っていますが)

//create a new array
@myInspectionsAmounts=Array.new

//get the amount from the inspection
amount = permits.elements['inspection'].elements['amount'].text

@myInspectionAmounts.push(amount)

それをループに入れてすべての検査を取得できると確信していますが、これは私が試した方法であり、xml ツリーの深さに関係なく、必要なすべての値を取得しました。

お役に立てれば!:)

于 2013-03-07T20:28:51.493 に答える