Я создаю документ 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, но это хорошо для меня. Я оставляю этот вопрос здесь на случай, если кто-нибудь еще наткнется на него.