2009-11-22 27 views
19

XSLT yeni soru: Aşağıdaki C# kod parçasını boş doldurunuz:XML'i HTML'ye HTML'de XSLT ile dönüştürmenin en kolay yolu C#?

public static string TransformXMLToHTML(string inputXml, string xsltString) { 
    // insert code here to apply the transform specified by xsltString to inputXml 
    // and return the resultant HTML string. 
    // You may assume that the xslt output type is HTML. 
} 

teşekkürler!

cevap

35

ne dersiniz: ideal olarak size cache ederek XslCompiledTransform yeniden kullanmak

public static string TransformXMLToHTML(string inputXml, string xsltString) 
{ 
    XslCompiledTransform transform = new XslCompiledTransform(); 
    using(XmlReader reader = XmlReader.Create(new StringReader(xsltString))) { 
     transform.Load(reader); 
    } 
    StringWriter results = new StringWriter(); 
    using(XmlReader reader = XmlReader.Create(new StringReader(inputXml))) { 
     transform.Transform(reader, null, results); 
    } 
    return results.ToString(); 
} 

Not - ya da belki (Kullanımdan kaldırıldığı olarak işaretlenir, gerçi) yerine XslTransform kullanın. Sadece eğlence için

+3

+1: bundan daha basit olamaz. – Dathan

+0

Marc, siz erkekler arasında bir prenssiniz. :) –

+0

Çok düzgün ve basit. – Chris

4

Marc önerdiği önbelleğe uygulayan bir biraz daha az zarif versiyon:

public static string TransformXMLToHTML(string inputXml, string xsltString) 
    { 
     XslCompiledTransform transform = GetAndCacheTransform(xsltString); 
     StringWriter results = new StringWriter(); 
     using (XmlReader reader = XmlReader.Create(new StringReader(inputXml))) 
     { 
      transform.Transform(reader, null, results); 
     } 
     return results.ToString(); 
    } 

    private static Dictionary<String, XslCompiledTransform> cachedTransforms = new Dictionary<string, XslCompiledTransform>(); 
    private static XslCompiledTransform GetAndCacheTransform(String xslt) 
    { 
     XslCompiledTransform transform; 
     if (!cachedTransforms.TryGetValue(xslt, out transform)) 
     { 
      transform = new XslCompiledTransform(); 
      using (XmlReader reader = XmlReader.Create(new StringReader(xslt))) 
      { 
       transform.Load(reader); 
      } 
      cachedTransforms.Add(xslt, transform); 
     } 
     return transform; 
    } 
+0

Sözlükdeki iş parçacığı güvenliği/senkronizasyonu hakkında endişelenmeniz gerekir, ancak bu satırlarda bir şey, Evet. –

+0

Ve benim xsltString hash değersiz ve o anahtar yerine bir anahtar olarak kullanmak yararlı olabilir. Bazı dönüşümler oldukça büyük olabilir - XslCompiledTransform içinde derlenmiş formda saklamak ve tekrar anahtar olarak saklamak için ekstra bellek cezasına çarptırmak için hiçbir sebep yoktur. – Dathan

İlgili konular