我有一个听起来很基本的问题,但我没有在任何地方找到解决方案。 我正在使用Ruby版本的XmlSimple,特别是xml_out函数。
问题
我输出的元素有一个属性节点和一个文本节点。 这就是我想要的:
<lane id='1'>unchannelized</lane>
这是我目前得到的:
<lane id='1'>
<content>unchannelized</content>
</lane>
我试过使用“ContentKey”=&gt; xml_out的'content'选项(除了“AttrPrefix”=&gt; true),但产生了相同的结果。我也试图改变ContentKey,同样的区别。
相关代码
属性&amp;文本节点被添加到数组中:
laneConfigArr << {"@id" => laneNo, "content" => netsimLaneChannelizationCode(matchArr[matchIndex])}
生成的实际哈希:
unhappyHash << {
#more stuff here,
"LaneConfig" => {"lane" => laneConfigArr},
#more stuff here
}
xml_out调用[EDITED]:
result["NetsimLinks"] = {"NetsimLink" => unhappyHash}
doc = XmlSimple.xml_out(result, {"AttrPrefix" => true, "RootName" => "CORSIMNetwork", "ContentKey" => "content"})
环境详情
到处看,似乎没有人遇到过这个问题。也许我错过了什么,或者可能不会/不应该这样做?
我非常感谢任何帮助。
答案 0 :(得分:3)
关于XmlSimple的好处在于它是可循环播放的:也就是说,您可以通过xml_in
放置所需的输出,它将为您提供使用xml_out
生成它所需的内容。 / p>
我们来看看。假设我们有以下简化的XML:
require 'xmlsimple'
xml = %Q(
<CORSIMNetwork>
<lane id='1'>unchannelized</lane>
</CORSIMNetwork>
)
现在让我们看一下XmlSimple.xml_in(xml)
:
{"lane"=>[{"id"=>"1", "content"=>"unchannelized"}]}
根已经消失了,因为我们没有指定KeepRoot
选项,但是否则就是我们所期望的。
现在让我们在其上xml_out
指定RootName
选项以获取根目录:
<CORSIMNetwork>
<lane id="1">unchannelized</lane>
</CORSIMNetwork>
看起来不错。我检查了AttrPrefix选项,除了在输入中要求"@id"
而不是"id"
键之外,输出仍然是相同的。
产生正确输出的完整脚本:
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>
由于以上对我有用,我唯一能想到的是你的哈希值不能包含你认为它包含的内容。
答案 1 :(得分:2)
这些是可以帮助你的一些例子
=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'})
首先出现要获取的xml作为块注释,然后是生成该xml所需的xml简单代码。