SORU
17 Aralık 2008, ÇARŞAMBA


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
18 Aralık 2008, PERŞEMBE


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>

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Madeon

    Madeon

    31 Ocak 2010
  • Matthew Morrill

    Matthew Morr

    15 EKİM 2011
  • Semantic Mastery

    Semantic Mas

    30 EKİM 2013