私はxml-object gemを使ってXMLを処理しています。私たちが受け取るXMLの中の特定の要素は、繰り返される場合とされない場合があります。一度しか表示されない場合、xml-objectはそれらを非配列プロパティとしてバインドしますが、複数回表示されると配列としてバインドされます。私はそれらが常に配列としてバインドされているかのように扱うことを好みます。これは私が話しているかを説明する必要がありますxml-objectを使って繰り返されるかもしれないxml要素を扱う方法
!/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番目の2つは失敗し、 "abc"には "baz"というメソッドはないと不平を言う。私が知る限り、 "foo.bar"の結果が配列に強制変換されると、その配列には、 "baz"というメソッドを持つ "foo.bar"によって返されたインストゥルメント文字列ではなく "プレーン"文字列が含まれます。
どのような考えですか?
ポインタありがとうございます。私はxpathでwhizではないので、私はそれを避け、純粋にオブジェクトレベルで対処したいと考えていました。しかし、あなたは何をしなければならないのですか? – jph