Я использую гем xml-object для обработки XML.Некоторые элементы в XML-документе, который мы получаем, могут повторяться или не повторяться.Когда они появляются только один раз, 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 в форме XML_ONE, идентичной XML в форме XML_TWO.Я попытался сделать это:
puts [*foo.bar][0]
puts foo.bar.to_a[0]
puts [*foo.bar][0].baz
puts foo.bar.to_a[0].baz
Первые две строки вывести «abc».Вторые два терпят неудачу, жалуясь, что нет никакого метода "baz" на "abc".Из того, что я могу сказать, когда результат "foo.bar" преобразуется в массив, этот массив содержит "простую" строку, а не строку с инструментами, возвращаемую "foo.bar", которая имеет метод "baz".
Есть мысли?