1

Rails 2.3.9、Ruby 1.9.3、Rubygems 1.8.24、Windows7Ultimateを使用しています

必要な出力が得られることを期待して、libxml-rubygemをインストールしました。全部で150ノードを超えるxmlファイルがあります。必要なのは各ノードの値を取得することだけです。

require 'xml'
my_file = 'invoice3.xml'
parser = XML::Parser.file(my_file)
document = parser.parse
terminalId_node = document.find('//terminalId').first
terminalId = terminalId_node.content
puts terminalId

terminalIdの値を取得できましたが、コーディング時間を節約するためにファイルをループしたいと思います。どんな助けでもいただければ幸いです。

更新:サンプルXML入力これは実際のxmlファイルの一部にすぎません

<invoice>
<terminalId>68</terminalId>
<transId>8</transId>
<docDate>2012-08-06 18:55:57</docDate>
<status>P</status>
<siteId>19</siteId>
<transCode>REL</transCode>
<typeCode>POS</typeCode>
<TotalQuantity>1</TotalQuantity>
<VATRate>12</VATRate>
<amountGrossVAT>0</amountGrossVAT>
<amountGrossNonVAT>100</amountGrossNonVAT>
<amountGrossZeroRated>0</amountGrossZeroRated>
<amountGross>100</amountGross>
<amountItemDiscount>0</amountItemDiscount>
<amountOverallDiscount>0</amountOverallDiscount>
<percentOverAllDiscount>0</percentOverAllDiscount>
<OverallDiscountText></OverallDiscountText>
<amountSeniorCitizenDiscount>0</amountSeniorCitizenDiscount>
<AmountOriginalSeniorCitizenDiscount>0</AmountOriginalSeniorCitizenDiscount>
<AmountCustomerPromoDiscount>0</AmountCustomerPromoDiscount>
<amountHeaderDiscount>0</amountHeaderDiscount>
<percentHeaderDiscount>0</percentHeaderDiscount>
<invoice-details>
    <invoice-detail>    
    <amountTotalDiscount>0</amountTotalDiscount>
<percentTotalDiscount>0</percentTotalDiscount>
<amountNetVAT>0</amountNetVAT>
<amountNetNonVat>100</amountNetNonVat>
<amountNetZeroRated>0</amountNetZeroRated>
<amountNet>100</amountNet>
<AmountVatExempt>0</AmountVatExempt>
<amountDue>100</amountDue>
    <invoice-detail>
<invoice-details>
</invoice>

すべてのデータを繰り返し抽出したい。

4

1 に答える 1

4

次の行は、ドキュメント内のすべてのterminalId要素を取得し、それらのコンテンツを含む配列を返します。

contents = document.find('//terminalId').to_a.map(&:content)

これは次と同等です:

contents = document.find('//terminalId').to_a.map { |e| e.content }

例との唯一の違いは、最初に見つかった要素のみを要求するfirst()を使用せず、すべての結果を取得するためにto_a()を使用することです。

于 2012-09-11T14:24:52.793 に答える