2011-04-11 10 views

Respuesta

18

Rubí núcleo REXML :: Documento tiene bastante impresión:

REXML::Document#write(output=$stdout, indent=-1, transitive=false, ie_hack=false) 

guión: Un entero. Si -1, no se usará la indentación ; de lo contrario, la sangría duplicará este número de espacios, y los niños tendrán una sangría adicional de . Para un valor de de 3, cada artículo será sangrado 3 niveles más, o 6 espacios más (2 * 3). El valor predeterminado es -1

Un ejemplo:

require "rexml/document" 

doc = REXML::Document.new "<a><b><c>TExt</c><d /></b><b><d/></b></a>" 
out = "" 
doc.write(out, 1) 
puts out 

Produce:

<a> 
<b> 
    <c> 
    TExt 
    </c> 
    <d/> 
</b> 
<b> 
    <d/> 
</b> 
</a> 

EDIT: rieles ya ha cargado REXML, por lo que sólo tiene que producir un nuevo documento y luego escribir el bonito texto impreso en alguna cadena que luego puede ser incrustado en una etiqueta <pre>.

+1

Gracias por esto. Para un trazador de líneas, encontré que esto también funciona: 'pone REXML :: Document.new (xml_str) .write (" ", 1)' – turbo

1

¿Qué tal el Nokogiri gem? Aquí hay un example use.

+0

¿Necesito el xslt para este método? Un método muy simple por sangría sería suficiente para mí. –

+0

Nunca he usado esta joya personalmente, pero parece que necesitarías la transformación. – FreeAsInBeer

+0

También se puede agregar a '~/.pryrc', y mejor reemplazar las llamadas' puts' con 'STDOUT.puts', por lo que funciona bien en Cucumber, por ejemplo. –

Cuestiones relacionadas