我有一个听起来很基本的问题,但我还没有找到解决的办法。
我使用的是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>

既然上面的方法对我有效,我唯一能想到的就是你的散列不能包含你认为它包含的内容。

10-08 01:18