我有一个听起来很基本的问题,但我还没有找到解决的办法。
我使用的是xmlsimple的ruby版本,特别是xml输出函数。
问题
输出一个包含一个属性节点和一个文本节点的元素时遇到问题。
我想要的是:
<lane id='1'>unchannelized</lane>
我现在得到的是:
<lane id='1'>
<content>unchannelized</content>
</lane>
我试过使用“contentkey”=>“content”选项来进行xml输出(除了“attrprefix”=>true),但得到了相同的结果。我也试过更改contentkey,同样的区别。
相关代码
将属性文本节点添加到数组中(&T):
laneConfigArr << {"@id" => laneNo, "content" => netsimLaneChannelizationCode(matchArr[matchIndex])}
正在生成的实际哈希:
unhappyHash << {
#more stuff here,
"LaneConfig" => {"lane" => laneConfigArr},
#more stuff here
}
XML输出调用[已编辑]:
result["NetsimLinks"] = {"NetsimLink" => unhappyHash}
doc = XmlSimple.xml_out(result, {"AttrPrefix" => true, "RootName" => "CORSIMNetwork", "ContentKey" => "content"})
环境详细信息
操作系统:Windows 7
红宝石:1.9.3-p125
xmlsimple:1.0.13标准
到处看看,似乎没有人有这个问题。也许我遗漏了什么,或者这件事不能/不应该做?
我非常感谢你的帮助。
最佳答案
xmlsimple的好处是它是圆可伸缩的:也就是说,您可以通过xml_in
将所需的输出放到xml_out
中,它将为您提供使用XmlSimple.xml_in(xml)
生成它所需的内容。
所以让我们看看。假设我们有以下简化的XML:
require 'xmlsimple'
xml = %Q(
<CORSIMNetwork>
<lane id='1'>unchannelized</lane>
</CORSIMNetwork>
)
现在让我们看看
KeepRoot
的结果:{"lane"=>[{"id"=>"1", "content"=>"unchannelized"}]}
根已不存在,因为我们没有指定
xml_out
选项,但在其他情况下,它是我们所期望的。现在,让我们对它执行
RootName
操作,指定"@id"
选项以使根目录恢复:<CORSIMNetwork>
<lane id="1">unchannelized</lane>
</CORSIMNetwork>
看起来不错。我选中了attrprefix选项,除了输入中需要
"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>
既然上面的方法对我有效,我唯一能想到的就是你的散列不能包含你认为它包含的内容。