Güzel bir baskı javascript ile XML
Elimde olmayan girintili bir XML oldukça baskı temsil eden bir dize var. Örneğin:
<root><node/></root>
olmalıdır:
<root>
<node/>
</root>
Dizim değil bir gereklilik. Sorunu çözmek için ben ilk başları ve beyaz boşluk Ekle ve çıkış pre etiketini kullanın XML için XML dönüştürmek. Yeni çizgi ve boşluk eklemek için yazdığı aşağıdaki fonksiyon:
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;
}
Ben o zaman bu fonksiyonu çağırın
jQuery('pre.formatted-xml').text(formatXml('<root><node1/></root>'));
Bu benim için gayet iyi çalışıyor ama bir önceki fonksiyon yazarken daha iyi bir yolu olmalı diye düşündüm. Oldukça yazdırmak için bir XML dizesi verilen sorumu çok daha iyi bir yol biliyor musunuz bunu bir html sayfası olarak mı? İş yapabileceği herhangi bir javascript ve/veya eklentileri bekliyoruz. Benim tek şartı istemci tarafında yapılması gereken bu.
CEVAP
Soru metniString sonuç beklenen gibi bir izlenime kapıldımHTML biçimli bir sonucu olarak karşı çıktı.
Eğer bu böyleysebunu başarmak için en kolay yolu <xsl:output indent="yes"/>
talimatı identity transformation ile ve XML belgesini işlemek için:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output omit-xml-declaration="yes" indent="yes"/> <xsl:template match="node()|@*"> <xsl:copy> <xsl:apply-templates select="node()|@*"/> </xsl:copy> </xsl:template> </xsl:stylesheet>
Sağlanan XML belgesi: bu dönüşümü uygularken
<root><node/></root>
en XSLT işlemci (.NET XslCompiledTransform, Sakson 6.5.4 ve 9.0.0.2, AltovaXML Sakson) istediğini elde etmek için:
<root> <node /> </root>
PHP için güzel bir baskı var mı?...
Güzel bir baskı XML Emacs dosyaları...
Güzel bir baskı Python XML...
Python güzel bir baskı, iç içe geçmiş ...
Ne kadar çok baskı JavaScript kullanar...