Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如果对象不是',是否有一种Ruby习惯用法用于将其封装在数组中;还没有?_Ruby_Xml_Arrays_Hash - Fatal编程技术网

如果对象不是',是否有一种Ruby习惯用法用于将其封装在数组中;还没有?

如果对象不是',是否有一种Ruby习惯用法用于将其封装在数组中;还没有?,ruby,xml,arrays,hash,Ruby,Xml,Arrays,Hash,我正在使用一个外部API来交换XML消息。因此,我使用了大量来自xml的散列 但是,#from_xml仅对数组中的重复元素进行编码。这是有道理的,但当我试图循环通过一个只出现一次的可重复元素时,它就会中断。例如: <Stuff> <SKU>ABC-123</SKU> <SKU>DEF-456</SKU> <SKU>XYZ-789</SKU> </Stuff> 将包含3个SKU,因此我可以

我正在使用一个外部API来交换XML消息。因此,我使用了大量来自xml的
散列

但是,
#from_xml
仅对数组中的重复元素进行编码。这是有道理的,但当我试图循环通过一个只出现一次的可重复元素时,它就会中断。例如:

<Stuff>
  <SKU>ABC-123</SKU>
  <SKU>DEF-456</SKU>
  <SKU>XYZ-789</SKU>
</Stuff>
将包含3个SKU,因此我可以执行以下操作:

my_hash["Stuff"].each do |sku|
  # process the sku
end
但它在使用此XML时失败:

<Stuff>
  <SKU>XYZ-789</SKU>
</Stuff>

有更干净的方法吗?

只需将其包装成一个数组并展平:

array_of_one_or_many = [my_hash['SKU']].flatten

如果它已经是一个数组,它将打开它并使它成为一个普通数组。这两种情况都适用。

当我过去遇到这种情况时,我使用

foo = ([] << bar).flatten
foo=([]您可以使用
Array()

array_of_one_or_many = [my_hash['SKU']].flatten
foo = ([] << bar).flatten
irb(main):012:0> Array(1)
=> [1]
irb(main):013:0> Array([1])
=> [1]