Ich habe eine Zeichenfolge, die eine nicht eingerückte XML darstellt, die ich gerne hübsch drucken möchte. Zum Beispiel:
<root><node/></root>
werden sollte:
<root>
<node/>
</root>
Die Syntaxhervorhebung ist keine Voraussetzung. Um das Problem zu lösen, transformiere ich zunächst das XML, um Zeilenumbrüche und Leerzeichen hinzuzufügen, und verwende dann ein vor Tag, um das XML auszugeben. Um neue Zeilen und Leerzeichen hinzuzufügen, habe ich die folgende Funktion geschrieben:
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;
}
Ich rufe die Funktion dann wie folgt auf:
jQuery('pre.formatted-xml').text(formatXml('<root><node1/></root>'));
Das funktioniert bei mir einwandfrei, aber während ich die vorherige Funktion schrieb, dachte ich, dass es einen besseren Weg geben muss. Also meine Frage ist, wissen Sie von einem besseren Weg gegeben eine XML-Zeichenfolge zu hübsch-drucken es in einer HTML-Seite? Alle Javascript-Frameworks und/oder Plugins, die diese Aufgabe übernehmen könnten, sind willkommen. Meine einzige Anforderung ist, dass dies auf der Client-Seite durchgeführt werden.