Я создаю XML-документ с помощью REXML и хочу вывести его в текст определенным образом. Документ представляет собой список тегов 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>
Я попытался передать функции .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 теперь "\n inst_50\n" или что-то в этом роде. Это взорвет приложение, которое читает xml.
Кто-нибудь знает, как я могу отформатировать выходной файл так, как я хочу?
Благодарен за любой совет, макс
РЕДАКТИРОВАТЬ. Я только что нашел ответ на ruby-forum через другое сообщение StackOverflow: 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 нет дополнительной линии, но меня это устраивает. Я оставляю этот вопрос здесь на случай, если кто-то еще наткнется на него.