我正在使用 xml-object gem 来处理 XML。我们收到的 XML 中的某些元素可能会或可能不会重复。当它们只出现一次时,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_ONE 的形式处理 xml 与 XML_TWO 形式的 xml 相同。我试过这样做:
puts [*foo.bar][0]
puts foo.bar.to_a[0]
puts [*foo.bar][0].baz
puts foo.bar.to_a[0].baz
前两行输出“abc”。后两个失败,抱怨“abc”上没有方法“baz”。据我所知,当“foo.bar”的结果被强制转换为一个数组时,该数组包含一个“普通”字符串,而不是由“foo.bar”返回的检测字符串,它具有“baz”方法。
有什么想法吗?