libxml-ruby を使用して、(欧州中央銀行のデータ フィードから) 次の形式で XML を解析しようとしています。
<?xml version="1.0" encoding="UTF-8"?>
<gesmes:Envelope xmlns:gesmes="http://www.gesmes.org/xml/2002-08-01"
xmlns="http://www.ecb.int/vocabulary/2002-08-01/eurofxref">
<gesmes:subject>Reference rates</gesmes:subject>
<gesmes:Sender>
<gesmes:name>European Central Bank</gesmes:name>
</gesmes:Sender>
<Cube>
<Cube time="2009-11-03">
<Cube currency="USD" rate="1.4658"/>
<Cube currency="JPY" rate="132.25"/>
<Cube currency="BGN" rate="1.9558"/>
</Cube>
</Cube>
</gesmes:Envelope>
次のようにドキュメントをロードしています。
require 'rubygems'
require 'xml/libxml'
doc = XML::Document.file('eurofxref-hist.xml')
しかし、データに対する XPATH クエリを許可するための正しい名前空間構成を考え出すのに苦労しています。
Cube
次のコードを使用して、すべてのノードを抽出できます。
doc.find("//*[local-name()='Cube']")
しかし、親ノードと子ノードの両方が呼び出されていることを考えると、Cube
これは実際には親ノードだけを反復処理するのに役立ちません。time
おそらく、この XPATH を変更して、パラメーターを持つノードのみを見つけることができますか?
私の目的は、属性 (つまり)Cube
を持つすべてのノードを抽出できるようにすることです。これにより、日付を抽出し、子ノードの為替レートを反復処理できます。time
<Cube time="2009-11-03">
Cube
誰でも助けることができますか?