Ruby 如何使用XmlSimple生成具有属性和文本节点的XML元素?
我有一个听起来很基本的问题,但我还没有找到解决办法。 我使用的是XmlSimple的Ruby版本,特别是xml_out函数 问题 我在输出一个元素时遇到问题,该元素有一个属性节点和一个文本节点。 以下是我想要的:Ruby 如何使用XmlSimple生成具有属性和文本节点的XML元素?,ruby,xml,xml-simple,Ruby,Xml,Xml Simple,我有一个听起来很基本的问题,但我还没有找到解决办法。 我使用的是XmlSimple的Ruby版本,特别是xml_out函数 问题 我在输出一个元素时遇到问题,该元素有一个属性节点和一个文本节点。 以下是我想要的: <lane id='1'>unchannelized</lane> 环境详细信息 操作系统:Windows7 Ruby:1.9.3-p125 XmlSimple:1.0.13 到处看看,似乎没有人有这个问题。也许我遗漏了什么,或者这不能/不应该做 我非常感
<lane id='1'>unchannelized</lane>
环境详细信息
- 操作系统:Windows7
- Ruby:1.9.3-p125
- XmlSimple:1.0.13
我非常感谢您在这方面的帮助。XmlSimple的优点在于它是可折叠的:也就是说,您可以通过
xml\u输入
输入所需的输出,它将为您提供使用xml\u输出
生成所需的内容
请让我们看一看。假设我们有以下简化的XML:
require 'xmlsimple'
xml = %Q(
<CORSIMNetwork>
<lane id='1'>unchannelized</lane>
</CORSIMNetwork>
)
根已不存在,因为我们尚未指定KeepRoot
选项,但除此之外,它是我们所期望的
现在,让我们在其上执行一个xml\u out
,指定RootName
选项以获取根:
<CORSIMNetwork>
<lane id="1">unchannelized</lane>
</CORSIMNetwork>
输出:
<CORSIMNetwork>
<LaneConfig>
<lane id="1">unchannelized</lane>
</LaneConfig>
</CORSIMNetwork>
未退火
由于以上内容对我有效,我唯一能想到的是,您的哈希不能包含您认为它包含的内容。以下是一些可以帮助您的示例
=begin
<lane id="1">
bolt,usain
</lane>
=end
data = {'id' => 1,'content' => 'bolt,usain'}
p XmlSimple.xml_out(data,{:rootname => 'lane'})
=begin
<lane id="1">
<runner num="1">
bolt, usain
</runner>
</lane>
=end
data = {'id' => 1, 'runner' => [{'num' => 1, 'content' => 'bolt,usain'}]}
p XmlSimple.xml_out(data,{:rootname => 'lane'})
=begin
<lane id="1">
<runner num="1">
bolt,usain
</runner>
<country code="165">
jamaica
</country>
</lane>
=end
data = {'id' => 1,
'runner' => [{'num' => 1, 'content' => 'bolt, usain'}],
'country' => [{'code' => 165, 'content' => 'jamaica'}]
}
p XmlSimple.xml_out(data,{:rootname => 'lane'})
=begin
<lane id="1">
<runner num="1">
<surname>bolt</surname>
<name>usain</name)
</runner>
<country code="165">
jamaica
</country>
</lane>
=end
data = {'id' => 1,
'runner' => [{'num' => 1, 'surname' => ["bolt"], 'name' => ["usain"]}],
'country' => [{'code' => 165, 'content' => 'jamaica'}]
}
p XmlSimple.xml_out(data,{:rootname => 'lane'})
=开始
博尔特,乌塞恩
=结束
数据={'id'=>1,'content'=>bolt,usain'}
p XmlSimple.xml_out(数据,{:rootname=>'lane'})
开始
博尔特,乌塞恩
=结束
数据={'id'=>1,'runner'=>[{'num'=>1,'content'=>'bolt,usain'}]}
p XmlSimple.xml_out(数据,{:rootname=>'lane'})
开始
博尔特,乌塞恩
牙买加
=结束
数据={'id'=>1,
'runner'=>[{'num'=>1,'内容'=>'博尔特,usain'}],
'国家'=>[{'code'=>165,'内容'=>'牙买加'}]
}
p XmlSimple.xml_out(数据,{:rootname=>'lane'})
开始
螺栓
usain 1,
'runner'=>[{'num'=>1',姓氏'=>[“bolt”],'name'=>[“usain”]}],
'国家'=>[{'code'=>165,'内容'=>'牙买加'}]
}
p XmlSimple.xml_out(数据,{:rootname=>'lane'})
首先显示要获取的xml,作为块注释,然后是生成该xml所需的xml简单代码。为什么要将输出传递给REXML?这一点很好,因为在XmlSimple引用中,他们在将REXML文档写入文件之前向其添加了一个空格。我真的不在乎,所以我可以绕过它。这与问题无关。如果我不这样做,我会得到相同的结果。您上面的代码(精确)为我返回:unchannelized square,您的
ContentKey
似乎没有使用attrprix
进行处理。但是您不需要使用带有id
的AttrPrefix,正如我在上面展示的和您已经发现的那样。也许有一个bug修复版本?尝试升级。宾果。非常感谢你。显然这是一只虫子。1.1.1工作正常。
require 'xmlsimple'
xml = %Q(
<CORSIMNetwork>
<lane id='1'>unchannelized</lane>
</CORSIMNetwork>
)
{"lane"=>[{"id"=>"1", "content"=>"unchannelized"}]}
<CORSIMNetwork>
<lane id="1">unchannelized</lane>
</CORSIMNetwork>
require 'xmlsimple'
lane_config = [{ "@id" => 1, "content" => "unchannelized"}]
unhappy = {
"LaneConfig" => {"lane" => lane_config},
}
doc = XmlSimple.xml_out(unhappy, {"AttrPrefix" => true,
"RootName" => "CORSIMNetwork",
"ContentKey" => "content"
})
puts doc
<CORSIMNetwork>
<LaneConfig>
<lane id="1">unchannelized</lane>
</LaneConfig>
</CORSIMNetwork>
=begin
<lane id="1">
bolt,usain
</lane>
=end
data = {'id' => 1,'content' => 'bolt,usain'}
p XmlSimple.xml_out(data,{:rootname => 'lane'})
=begin
<lane id="1">
<runner num="1">
bolt, usain
</runner>
</lane>
=end
data = {'id' => 1, 'runner' => [{'num' => 1, 'content' => 'bolt,usain'}]}
p XmlSimple.xml_out(data,{:rootname => 'lane'})
=begin
<lane id="1">
<runner num="1">
bolt,usain
</runner>
<country code="165">
jamaica
</country>
</lane>
=end
data = {'id' => 1,
'runner' => [{'num' => 1, 'content' => 'bolt, usain'}],
'country' => [{'code' => 165, 'content' => 'jamaica'}]
}
p XmlSimple.xml_out(data,{:rootname => 'lane'})
=begin
<lane id="1">
<runner num="1">
<surname>bolt</surname>
<name>usain</name)
</runner>
<country code="165">
jamaica
</country>
</lane>
=end
data = {'id' => 1,
'runner' => [{'num' => 1, 'surname' => ["bolt"], 'name' => ["usain"]}],
'country' => [{'code' => 165, 'content' => 'jamaica'}]
}
p XmlSimple.xml_out(data,{:rootname => 'lane'})