供应商采用以下格式的XML:
<message type="login", serial="1">
<site>BETA</site>
<type>DEFAULT</type>
<username>john</username>
<password>1234</password>
</message>注意:type同时用于属性和元素。
当我试图通过xml_simple生成XML时
data_2 = {'type' => 'login', 'serial' => 1,
'site' => ['content' => 'BETA'],
'type' => ['content' => 'DEFAULT'],
'username' => ['content' => 'john'],
'password' => ['content' => '1234'],
}
xml_2 = XmlSimple.xml_out(data_2, {:rootname => 'message'})
puts xml_2给予:
<message serial="1">
<type>DEFAULT</type>
<site>BETA</site>
<username>john</username>
<password>1234</password>
</message>如何将type保存在message的属性和元素中
发布于 2014-01-07 02:25:41
问题是您同时需要一个属性和一个名为type的子元素,因此哈希有两个具有此名称的键。由于散列中的键是唯一的,所以第二个键替换了第一个键,所以您实际传递给XmlSimple的散列是:
data_2 ={“串行”=> 1,“站点”内容“=>”测试版,“键入”=>内容“=>”默认值,“用户名”“=>”内容‘=>’john,‘密码’=>‘内容’=>‘1234,}
将'type' => 'login'条目替换为'type' => ['content' => 'DEFAULT']。
使用XmlSimple的一种方法是使用AttrPrefix选项,并在你的态度名称前加上@ (参见医生们):
data_2 = {'@type' => 'login', '@serial' => 1,
'site' => ['content' => 'BETA'],
'type' => ['content' => 'DEFAULT'],
'username' => ['content' => 'john'],
'password' => ['content' => '1234'],
}
xml_2 = XmlSimple.xml_out(data_2, {:rootname => 'message', 'AttrPrefix' => true})
puts xml_2输出:
<message type="login" serial="1">
<site>BETA</site>
<type>DEFAULT</type>
<username>john</username>
<password>1234</password>
</message>发布于 2014-01-07 01:38:57
最后我使用了builder
require 'builder'
username = 'john'
password = '1234'
xml = Builder::XmlMarkup.new(:indent => 2, :target => $stdout)
xml.message("type" => "login", "serial" => 1) {
xml.site "BETA"
xml.type "DEFAULT"
xml.username username
xml.password password
}给予:
<message type="login" serial="1">
<site>BETA</site>
<type>DEFAULT</type>
<username>john</username>
<password>1234</password>
</message>https://stackoverflow.com/questions/20946468
复制相似问题