2010-11-29 21 views
5

'un çıktısı nasıl oluşturulur/girilir? Bir html kodu parçası oluşturmaya çalışıyorum. Ama oldukça basılı/girintili olmak için ihtiyacım var. <xsl:text>&#xa;</xsl:text> ve <xsl:text>&#9;</xsl:text> kullanmadan bunu yapmak için herhangi bir yolu var mı?Bir XSL Dönüşümü

Aşağıdaki satırı hiç sonuç vermeden kullandım.

<xsl:output method="html" indent="yes"/> 

Follwoing C# kodudur;

XslCompiledTransform XSLT = new XslCompiledTransform(); 
    XSLT.Load(xslPath); 

    using (XmlTextWriter writer = new XmlTextWriter(writePath, null)) 
    { 
     if (isTopLevel) 
     { 
      XSLT.Transform(XMLDocumentForCurrentUser, writer); 
     } 
     else 
     { 
      XsltArgumentList xslArg = new XsltArgumentList(); 
      xslArg.AddParam("MenuIndex", "", menuIndex); 
      XSLT.Transform(XMLDocumentForCurrentUser, xslArg, writer); 
     } 
    } 
// I write the output to file 
//All this works fine, only now I need the HTML to be readable (in the browser's view source or any notepad) 

XSLT çıktısını biçimlendirmenin (en az girintili) bir yolu bilen var mı?

+0

@conqenator: "xsl: output/@ indent" serileştirme parametresini kullanmak istemiyorsanız (belki de MSXSL'de olduğu gibi iyi değildir) ve bunu manuel olarak yapmak istemiyorsanız, o zaman XSLT kapsamında çözüm, ancak bu tür kısıtlamalar koyduğunuz için. –

+0

Neden oylama? –

+1

Neden indent = "yes" in sizin için işe yaramadığını anlamak için daha fazla bilgi vermeniz gerekecektir. XSLT işlemciniz hangisidir, dönüşümü tam olarak nasıl çalıştırıyorsunuz, tam olarak ne dönüştürüyorsunuz (örneğin, bir dosya?), Dönüşüm sonucuna nasıl bakarsınız? –

cevap

6

XSLT işlemcisinin xsl: output direktifini uygulamasını istiyorsanız kendi XmlTextWriter'ınızı yaratmayın. Bunun yerine bir dosyaya doğrudan yazar veya aşağıdaki gibi bir XmlWriter oluşturmak ya: <xsl:output indent="yes"/> yanında oldukça-baskı için

using (XmlWriter result = XmlWriter.Create(writePath, XSLT.OutputSettings)) 
{ 
     if (isTopLevel) 
     { 
      XSLT.Transform(XMLDocumentForCurrentUser, result); 
     } 
     else 
     { 
      XsltArgumentList xslArg = new XsltArgumentList(); 
      xslArg.AddParam("MenuIndex", "", menuIndex); 
      XSLT.Transform(XMLDocumentForCurrentUser, xslArg, result); 
     } 
} 
+1

+1 Doğru yanıtın yanı sıra, eksik açıklamanın yanı sıra: Dönüşüm, çıktı sonucunu doğru bir şekilde serileştiriyor, ancak XmlWriter sınıfı, varsayılan olarak yalnızca beyaz düğümü beyaz boşlukta soyar; Bu davranışı XmlWriter sınıfına bir parametre ile kapatmanız gerekir. –

+0

Kusursuz çalıştı! Teşekkürler! –

+0

Teşekkürler! Çıktının neden girintilemediğini ve bunun neden düzeltildiğini anlamaya çalışıyorum. – EM0

3

Orada bilinmektedir yolları. bakmak

biri iyi bir yer Dave Pawson's XSLT FAQ geçerli: http://www.dpawson.co.uk/xsl/sect2/pretty.html

Ayrıca XPath Visualizer koduna bir göz atmak isteyebilirsiniz.

+0

OP, çıktı serileştirme parametrelerinin XSLT işlemcisiyle çalışmadığını ve manuel bir kimlik kullanmak istemediğini söylüyor. –

+0

Aslında bu soruyu yayınlarken merak ettim (ve etrafta olduğunuzu umuyordum). :) Evet, birkaç gün önce Xpath görselleştiricisini çoktan indirdim. Linkler için teşekkürler. –

+0

@Alejandro: Bu, çok sayıda durumda bir sorun olabilir. Güzel baskı için güvenilir yol, özellikle dönüşüm farklı XSLT işlemcilerle çalıştırılacaksa, çentik parametrelerine değil, DIY'e güvenmektir. –