REXMLを使用してxmlドキュメントを作成していて、特定の方法でテキストに出力したいと考えています。ドキュメントはCuePointタグのリストであり、Element.newとadd_elementで生成したタグはすべて、次のように1行にまとめられています(stackoverflowはここで2行に分割していますが、次のタグがすべてオンになっていると想像してください) 1行):
<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>
.write関数に値2を渡して、それらをインデントしようとしました。これにより、次のようになります。
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>
テキストだけのタグの内容に空白が挿入されているため、これは不要です。つまり、Nameタグの内容は「\ ninst_50\n」などになります。これにより、xmlを読み取るアプリが爆破されます。
誰かが私がそれを望むように出力ファイルをフォーマットする方法を知っていますか?
アドバイスに感謝します、最大
編集-私は別の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タグの間に余分な線はありませんが、それは私にとっては問題ありません。他の誰かがそれに遭遇した場合に備えて、私はこの質問をここに残しておきます。