gpt4 book ai didi

ruby - Rexml - 带有内联文本和缩进子标签的 pretty-print

转载 作者:数据小太阳 更新时间:2023-10-29 06:48:36 24 4
gpt4 key购买 nike

我正在使用 REXML 构建 xml 文档,并希望以特定方式输出到文本。该文档是一个 CuePoint 标签列表,我用 Element.new 和 add_element 生成的标签都像这样混合成一行:(stackoverflow 在这里将它们分成两行,但想象一下以下内容一行):

<CuePoint><Time>15359</Time><Type>event</Type><Name>inst_50</Name></CuePoint><CuePoint><Time>16359</Time><Type>event</Type><Name>inst_50</Name></CuePoint>

当我将它们保存到文件中时,我希望它们看起来像这样:

<CuePoint>
<Time>15359</Time>
<Type>event</Type>
<Name>inst_50</Name>
</CuePoint>

<CuePoint>
<Time>16359</Time>
<Type>event</Type>
<Name>inst_50</Name>
</CuePoint>

我尝试将值 2 传递给 .write 函数以缩进它们:这会产生以下结果:

xml.write($stdout, 2)产生

<CuePoint>
<Time>
15359
</Time>
<Type>
event
</Type>
<Name>
inst_50
</Name>
</CuePoint>
<CuePoint>
<Time>
16359
</Time>
<Type>
event
</Type>
<Name>
inst_50
</Name>
</CuePoint>

这是不需要的,因为它在只有文本的标签内容中插入了空格。即名称标签的内容现在是“\n inst_50\n”或其他东西。这将炸毁读取 xml 的应用程序。

有谁知道如何按照我想要的方式格式化输出文件?

感谢任何建议,max

编辑 - 我刚刚通过另一个 StackOverflow 帖子在 ruby​​-forum 上找到了答案:http://www.ruby-forum.com/topic/195353

  formatter = REXML::Formatters::Pretty.new
formatter.compact = true
File.open(@xml_file,"w"){|file| file.puts formatter.write(xml.root,"")}

这会产生如下结果

<CuePoint>
<Time>33997</Time>
<Type>event</Type>
<Name>inst_45_off</Name>
</CuePoint>
<CuePoint>
<Time>34080</Time>
<Type>event</Type>
<Name>inst_45</Name>
</CuePoint>

CuePoint 标记之间没有额外的行,但这对我来说很好。我把这个问题留在这里,以防其他人偶然发现它。

最佳答案

您需要将格式化程序的 compact 属性设置为 true,但您只能通过先设置一个单独的格式化程序对象,然后使用它来进行编写,而不是调用文档自己的写入方法来做到这一点。

formatter = REXML::Formatters::Pretty.new(2)
formatter.compact = true # This is the magic line that does what you need!
formatter.write(xml, $stdout)

关于ruby - Rexml - 带有内联文本和缩进子标签的 pretty-print ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4737944/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com