Приятной особенностью XmlSimple является то, что он может быть циклически отключен: то есть вы можете указать желаемый результат через xml_in
, и он даст вам то, что вам нужно для его создания с xml_out
.
Итак, давайте посмотрим. Скажем, у нас есть следующий упрощенный 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>
Поскольку вышесказанное работает для меня, единственное, о чем я могу думать, это то, что ваш хэш не должен содержать то, что, по вашему мнению, оно содержит.