J'ai une chaîne qui représente un XML non indenté que je voudrais joliment imprimer. Par exemple:
<root><node/></root>
devrait devenir:
<root>
<node/>
</root>
La mise en évidence de la syntaxe n'est pas obligatoire. Pour résoudre le problème, je transforme d'abord le XML pour ajouter des retours chariot et des espaces blancs, puis j'utilise une balise pré pour générer le XML. Pour ajouter de nouvelles lignes et des espaces blancs, 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'appelle ensuite la fonction comme ceci:
jQuery('pre.formatted-xml').text(formatXml('<root><node1/></root>'));
Cela fonctionne parfaitement bien pour moi, mais pendant que j'écrivais la fonction précédente, je pensais qu'il devait y avoir un meilleur moyen. Ma question est donc de savoir si vous connaissez un meilleur moyen, avec une chaîne XML, de l'imprimer dans une page html? Tous les frameworks et / ou plugins javascript qui pourraient faire le travail sont les bienvenus. Ma seule exigence est que cela soit fait du côté client.