Tengo una cadena que representa un XML sin sangría que me gustaría imprimir bonita. Por ejemplo:
<root><node/></root>
debe convertirse:
<root>
<node/>
</root>
El resaltado de sintaxis no es un requisito. Para abordar el problema, primero transformo el XML para agregar retornos de carro y espacios en blanco y luego uso una etiqueta previa para generar el XML. Para agregar nuevas líneas y espacios en blanco, escribí la siguiente función:
function formatXml(xml) {
var formatted = '';
var reg = /(>)(<)(\/*)/g;
xml = xml.replace(reg, '$1\r\n$2$3');
var pad = 0;
jQuery.each(xml.split('\r\n'), function(index, node) {
var indent = 0;
if (node.match( /.+<\/\w[^>]*>$/ )) {
indent = 0;
} else if (node.match( /^<\/\w/ )) {
if (pad != 0) {
pad -= 1;
}
} else if (node.match( /^<\w[^>]*[^\/]>.*$/ )) {
indent = 1;
} else {
indent = 0;
}
var padding = '';
for (var i = 0; i < pad; i++) {
padding += ' ';
}
formatted += padding + node + '\r\n';
pad += indent;
});
return formatted;
}
Luego llamo a la función así:
jQuery('pre.formatted-xml').text(formatXml('<root><node1/></root>'));
Esto funciona perfectamente bien para mí, pero mientras escribía la función anterior, pensé que debía haber una mejor manera. Entonces, mi pregunta es ¿conoce alguna mejor manera dada una cadena XML para imprimirla bonita en una página html? Todos los marcos y / o complementos de JavaScript que puedan hacer el trabajo son bienvenidos. Mi único requisito es que esto se haga en el lado del cliente.