Sto costruendo un documento xml con REXML e desidero eseguire l'output in testo in un modo particolare. Il doc è un elenco di tag CuePoint, e quelli che ho generato con Element.new e add_element sono tutti riuniti in un'unica riga come questa: (StackOverflow li ha divisi su due righe qui ma immagina quanto segue è tutto su una riga):Rexml - bella stampa con testo inline e tag figlio rientrati
<CuePoint><Time>15359</Time><Type>event</Type><Name>inst_50</Name></CuePoint><CuePoint><Time>16359</Time><Type>event</Type><Name>inst_50</Name></CuePoint>
quando salvo fuori di file, voglio che appaiono così:
<CuePoint>
<Time>15359</Time>
<Type>event</Type>
<Name>inst_50</Name>
</CuePoint>
<CuePoint>
<Time>16359</Time>
<Type>event</Type>
<Name>inst_50</Name>
</CuePoint>
ho provato passando la funzione .write un valore pari a 2, per il rientro loro: questo produce quanto segue:
xml.write($stdout, 2)
produce
<CuePoint>
<Time>
15359
</Time>
<Type>
event
</Type>
<Name>
inst_50
</Name>
</CuePoint>
<CuePoint>
<Time>
16359
</Time>
<Type>
event
</Type>
<Name>
inst_50
</Name>
</CuePoint>
Questo è indesiderabile perché ha inserito uno spazio nel contenuto dei tag, che hanno solo il testo. cioè il contenuto del tag Name ora è "\ n inst_50 \ n" o qualcosa del genere. Questo farà esplodere l'app che legge l'xml.
Qualcuno sa come posso formattare il file di output nel modo in cui lo voglio?
grato per qualsiasi consiglio, max
EDIT - Ho appena trovato la risposta su Ruby-forum, tramite un altro post 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,"")}
Questo produce risultati come
<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>
Non c'è una linea in più tra i tag CuePoint, ma per me va bene. Lascio questa domanda qui nel caso in cui qualcun altro si imbatta in esso.
Grazie dmarkow, questo era lo stesso che ho capito dopo la pubblicazione (vedi la mia modifica). –
Nota che devi anche impostare 'formatter.width =' se vuoi evitare che le linee di nodi di testo più lunghe vengano avvolte. –