我正在从活动记录中解析带有'to_xml'的哈希数组,我想知道我是否可以删除一些节点 这是解析代码:
arrayHash.to_xml(:root => "Cenario", :skip_types => true, :skip_instruct => true)
我得到这样的XML:
<Cenario>
<Cenario nil="true"></Cenario>
<Cenario>
<TamanhoRegistro>
<nomeCampo>Tamanho Registro</nomeCampo>
<X>10</X>
<Y>20</Y>
<valor>10</valor>
</TamanhoRegistro>
<VersaoRegistro>
<nomeCampo>Versao Registro</nomeCampo>
<X>20</X>
<Y>30</Y>
</VersaoRegistro>
</Cenario>
.
.
.
.
<Cenario>
<TamanhoRegistro>
<nomeCampo>Tamanho Registro</nomeCampo>
<X>10</X>
<Y>20</Y>
<valor>10</valor>
</TamanhoRegistro>
<VersaoRegistro>
<nomeCampo>Versao Registro</nomeCampo>
<X>20</X>
<Y>30</Y>
</VersaoRegistro>
</Cenario>
</Cenario>
这是填充每个数组插槽的哈希。
hashExemplo = {
"TamanhoRegistro" => {'nomeCampo' =>'Tamanho Registro', 'X'=> '10', 'Y'=> '20', 'valor' => '10'},
"VersaoRegistro" => {'nomeCampo' =>'Versao Registro', 'X'=> '10', 'Y'=> '20', 'valor' => '10'},
id => id}
我想删除节点,将root更改为'Cenarios',将每个对象(hash)更改为'Cenario'。
顺便说一句,抱歉英语不好。尽力改善它。干杯。
答案 0 :(得分:1)
很抱歉看到没有人回答你的问题!我会试一试,虽然我不完全确定我会遵循它的原样。
如果我理解正确,你应该能够通过以下方式得到你想要的东西:
arrayHash.to_xml(:root => "Cenarios", :skip_types => true, :skip_instruct => true)
请注意,我将根更改为Cenarios
复数。这将为您提供如下XML:
<Cenorios>
<Cenorio>
<TamanhoRegistro>
<nomeCampo>Tamanho Registro</nomeCampo>
<X>10</X>
<Y>20</Y>
<valor>10</valor>
</TamanhoRegistro>
<VersaoRegistro>
<nomeCampo>Versao Registro</nomeCampo>
<X>10</X>
<Y>20</Y>
<valor>10</valor>
</VersaoRegistro>
</Cenorio>
</Cenorios>
或者您是说要将TamanhoRegistro
和VersaoRegistro
等等更改为Cenario
?如果是这样,假设您的arrayHash是这样的:
arrayHash = [hashExemplo, otherHash]
你可以这样做:
arrayHash.map(&:values).flatten.to_xml(:root => "Cenorios", :skip_types => true)
会为您提供如下所示的XML:
<Cenorios>
<Cenorio>
<nomeCampo>Tamanho Registro</nomeCampo>
<X>10</X>
<Y>20</Y>
<valor>10</valor>
</Cenorio>
<Cenorio>
<nomeCampo>Versao Registro</nomeCampo>
<X>10</X>
<Y>20</Y>
<valor>10</valor>
</Cenorio>
<Cenorio>
<nomeCampo>Tamanho Registro</nomeCampo>
<X>10</X>
<Y>20</Y>
<valor>10</valor>
</Cenorio>
<Cenorio>
<nomeCampo>Versao Registro</nomeCampo>
<X>10</X>
<Y>20</Y>
<valor>10</valor>
</Cenorio>
</Cenorios>
本质上,#map将遍历数组,从散列中的每个散列值获取一个数组,因此数组现在将是一个数组数组,因此#flatten将其展平为一个数组。
这是回答你的问题,还是我错过了什么?
答案 1 :(得分:0)
而不是散列数组,开始使用数组的散列。 工作得更好,唯一的问题是subroot是哈希键和它的kinf烦人。但是没有人回答我......我猜我将不得不忍受......