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

  • Amena

    Amena

    15 Kasım 2006
  • HBO

    HBO

    17 Mayıs 2006
  • hydejiaqi

    hydejiaqi

    12 Mart 2008