Saya memiliki string yang mewakili XML tanpa indentasi yang ingin saya cetak dengan cantik. Sebagai contoh:
<root><node/></root>
harus menjadi:
<root>
<node/>
</root>
Penyorotan sintaks bukan persyaratan. Untuk mengatasi masalah ini saya pertama-tama mengubah XML untuk menambahkan carriage return dan spasi dan kemudian menggunakan tag pra untuk mengeluarkan XML. Untuk menambahkan baris baru dan spasi saya menulis fungsi berikut:
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;
}
Saya kemudian memanggil fungsi seperti ini:
jQuery('pre.formatted-xml').text(formatXml('<root><node1/></root>'));
Ini berfungsi dengan baik bagi saya tetapi ketika saya menulis fungsi sebelumnya, saya pikir pasti ada cara yang lebih baik. Jadi pertanyaan saya adalah apakah Anda mengetahui cara yang lebih baik untuk memberikan string XML untuk mencetaknya dengan cantik di halaman html? Kerangka kerja javascript dan / atau plugin apa pun yang dapat melakukan pekerjaan itu dipersilakan. Satu-satunya persyaratan saya adalah ini dilakukan di sisi klien.