J'ai une chaîne qui représente un non indenté XML que je voudrais pretty-print. Par exemple:
<root><node/></root>
devrait devenir:
<root>
<node/>
</root>
La coloration syntaxique n'est pas une exigence. Pour résoudre le problème j'ai d'abord transformer le XML pour ajouter des retours chariot et les espaces blancs et ensuite utiliser un pré balise de sortie XML. Pour ajouter de nouvelles lignes et de nouveaux espaces en blanc, j'ai écrit la fonction suivante:
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;
}
J'ai ensuite appeler la fonction comme ceci:
jQuery('pre.formatted-xml').text(formatXml('<root><node1/></root>'));
Cela fonctionne parfaitement bien pour moi mais quand j'ai écrit la fonction précédente j'ai pensé qu'il doit y avoir une meilleure façon. Donc ma question est connaissez-vous une meilleure façon étant donné une chaîne XML pour pretty-print dans une page html? Tout frameworks javascript et/ou plugins qui pourraient faire le travail sont les bienvenus. Ma seule exigence est de ce fait sur le côté client.