首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用xml-simple生成具有相同属性和元素名称的XML

使用xml-simple生成具有相同属性和元素名称的XML
EN

Stack Overflow用户
提问于 2014-01-06 09:09:32
回答 2查看 199关注 0票数 1

供应商采用以下格式的XML:

代码语言:javascript
复制
<message type="login", serial="1"> 
  <site>BETA</site>
  <type>DEFAULT</type> 
  <username>john</username> 
  <password>1234</password>
</message>

注意:type同时用于属性和元素。

当我试图通过xml_simple生成XML时

代码语言:javascript
复制
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

给予:

代码语言:javascript
复制
<message serial="1">
  <type>DEFAULT</type>
  <site>BETA</site>
  <username>john</username>
  <password>1234</password>
</message>

如何将type保存在message的属性和元素中

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-01-07 02:25:41

问题是您同时需要一个属性和一个名为type的子元素,因此哈希有两个具有此名称的键。由于散列中的键是唯一的,所以第二个键替换了第一个键,所以您实际传递给XmlSimple的散列是:

data_2 ={“串行”=> 1,“站点”内容“=>”测试版,“键入”=>内容“=>”默认值,“用户名”“=>”内容‘=>’john,‘密码’=>‘内容’=>‘1234,}

'type' => 'login'条目替换为'type' => ['content' => 'DEFAULT']

使用XmlSimple的一种方法是使用AttrPrefix选项,并在你的态度名称前加上@ (参见医生们):

代码语言:javascript
复制
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

输出:

代码语言:javascript
复制
<message type="login" serial="1">
  <site>BETA</site>
  <type>DEFAULT</type>
  <username>john</username>
  <password>1234</password>
</message>
票数 1
EN

Stack Overflow用户

发布于 2014-01-07 01:38:57

最后我使用了builder

代码语言:javascript
复制
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
}

给予:

代码语言:javascript
复制
<message type="login" serial="1">
  <site>BETA</site>
  <type>DEFAULT</type>
  <username>john</username>
  <password>1234</password>
</message>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20946468

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档