Eu tenho uma string que representa um XML não recuado que eu gostaria de imprimir. Por exemplo:
<root><node/></root>
Deve se tornar:
<root>
<node/>
</root>
O destaque da sintaxe não é um requisito. Para resolver o problema, primeiro transformo o XML para adicionar retornos de carro e espaços em branco e, em seguida, uso uma tag pré para gerar o XML. Para adicionar novas linhas e espaços em branco, escrevi a seguinte função:
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;
}
Eu então chamo a função assim:
jQuery('pre.formatted-xml').text(formatXml('<root><node1/></root>'));
Isso funciona perfeitamente bem para mim, mas enquanto escrevia a função anterior, pensei que deveria haver uma maneira melhor. Então, minha pergunta é: você conhece alguma maneira melhor de fornecer uma string XML para imprimi-la em uma página html? Quaisquer estruturas javascript e / ou plug-ins que possam fazer o trabalho são bem-vindos. Meu único requisito é que isso seja feito no lado do cliente.