Mam ciąg reprezentujący XML bez wcięć, który chciałbym dobrze wydrukować. Na przykład:
<root><node/></root>
powinno stać się:
<root>
<node/>
</root>
Podświetlanie składni nie jest wymagane. Aby rozwiązać ten problem, najpierw przekształcam XML, dodając powrót karetki i spacje, a następnie używam znacznika wstępnego, aby wyprowadzić XML. Aby dodać nowe linie i spacje, napisałem następującą funkcję:
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;
}
Następnie wywołuję tę funkcję w ten sposób:
jQuery('pre.formatted-xml').text(formatXml('<root><node1/></root>'));
U mnie to działa doskonale, ale kiedy pisałem poprzednią funkcję, pomyślałem, że musi być lepszy sposób. Więc moje pytanie brzmi: czy znasz lepszy sposób na ładnie wydrukowany ciąg XML na stronie html? Wszelkie frameworki i / lub wtyczki javascript, które mogłyby wykonać to zadanie, są mile widziane. Moim jedynym wymaganiem jest to, aby zostało to zrobione po stronie klienta.