xml-objectgemを使用してXMLを処理しています。私たちが受け取るXMLの特定の要素は、繰り返される場合と繰り返されない場合があります。それらが1回だけ表示される場合、xml-objectはそれらを非配列プロパティとしてバインドしますが、複数回表示される場合、それらは配列としてバインドされます。私はそれらを常に配列としてバインドされているかのように扱いたいと思います。これは私が話していることを説明するはずです:
!/usr/bin/env ruby
require 'rubygems'
require 'xml-object'
XML_ONE = <<END
<foo>
<bar baz="123">abc</bar>
</foo>
END
foo = XMLObject.new(XML_ONE)
puts foo.bar
puts foo.bar.baz
XML_TWO = <<END
<foo>
<bar baz="123">abc</bar>
<bar baz="456">def</bar>
</foo>
END
foo = XMLObject.new(XML_TWO)
puts foo.bar[0]
puts foo.bar[0].baz
私がやりたいのは、XML_TWO形式のxmlと同じようにXML_ONE形式のxmlを処理することです。私はこれをやってみました:
puts [*foo.bar][0]
puts foo.bar.to_a[0]
puts [*foo.bar][0].baz
puts foo.bar.to_a[0].baz
最初の2行は「abc」を出力します。次の2つは失敗し、「abc」にメソッド「baz」がないことを訴えます。私の知る限り、「foo.bar」の結果が配列に強制変換されると、その配列には「plain」文字列が含まれ、メソッド「baz」を持つ「foo.bar」によって返されるインストルメント化された文字列は含まれません。
何かご意見は?