C # XSLT Stil Sayfası nasıl uygulanır


190

C # kullanarak bir XML belgesine bir XSLT stil sayfası uygulamak ve çıktıyı bir dosyaya yazmak istiyorum.


11
Aslında, bunun harika bir soru olduğunu düşünüyorum ve iyi bir cevap verdiniz. Yeniden açmaya aday gösterme.
Dominic Rodger

Xslt kafa karıştırıcı buldum, bu yüzden bu bana yardımcı oldu github.com/beto-rodriguez/SuperXml
bto.rdz

Yanıtlar:


177

Burada olası bir cevap buldum: http://web.archive.org/web/20130329123237/http://www.csharpfriends.com/Articles/getArticle.aspx?articleID=63

Makaleden:

XPathDocument myXPathDoc = new XPathDocument(myXmlFile) ;
XslTransform myXslTrans = new XslTransform() ;
myXslTrans.Load(myStyleSheet);
XmlTextWriter myWriter = new XmlTextWriter("result.html",null) ;
myXslTrans.Transform(myXPathDoc,null,myWriter) ;

Düzenle:

Ama güvenilir derleyicim diyor ki XslTransform: Eski: Yerine XslCompiledTransformkullanın:

XPathDocument myXPathDoc = new XPathDocument(myXmlFile) ;
XslCompiledTransform myXslTrans = new XslCompiledTransform();
myXslTrans.Load(myStyleSheet);
XmlTextWriter myWriter = new XmlTextWriter("result.html",null);
myXslTrans.Transform(myXPathDoc,null,myWriter);

Bağlandığım sınıfı yapmak için cevabınızın bir kısmını aldığımdan, buraya bir yorum olarak koyacağımı düşündüm. Umarım insanlar için işleri kolaylaştırır: dftr.ca/?p=318
DFTR

Set edebiliyoruz çünkü yerine aşırı versiyonunun bu çözümü tercih XmlReaderSettings ve XmlWriterSettings vb DTD, Schemas kullanılarak
Alina B.

2
Bunu VB.NET (benim "offspec" dil, C # tercih) yapmak gerekir ve cevabım benim çözüm yol açtı. Teşekkürler
Eon

137

Bu kod, uygun kullanılarak önemli ölçüde kısaltılabilir o Daren mükemmel cevap, not dayanarak XslCompiledTransform.Transform aşırı :

var myXslTrans = new XslCompiledTransform(); 
myXslTrans.Load("stylesheet.xsl"); 
myXslTrans.Transform("source.xml", "result.html"); 

(Bunu bir cevap olarak ortaya koyduğum için üzgünüm, ancak code blockyorumlardaki destek oldukça sınırlıdır.)

VB.NET'te, bir değişkene bile ihtiyacınız yoktur:

With New XslCompiledTransform()
    .Load("stylesheet.xsl")
    .Transform("source.xml", "result.html")
End With

16

İşte MSDN'de C # XSL Dönüşümleri nasıl yapılır hakkında bir öğretici:

http://support.microsoft.com/kb/307322/en-us/

ve işte dosyaları nasıl yazacağım:

http://support.microsoft.com/kb/816149/en-us

tıpkı bir yan not olarak: Doğrulamayı da yapmak istiyorsanız, burada başka bir öğretici (DTD, XDR ve XSD (= Şema) için):

http://support.microsoft.com/kb/307379/en-us/

biraz daha bilgi vermek için bunu ekledim.


6
Bu yalnızca bağlantıya verilen bir yanıttır. Lütfen bağlantılı sayfaların ilgili kısımlarını ekleyin.
Thomas Weller

1

Bu size yardımcı olabilir

public static string TransformDocument(string doc, string stylesheetPath)
{
    Func<string,XmlDocument> GetXmlDocument = (xmlContent) =>
     {
         XmlDocument xmlDocument = new XmlDocument();
         xmlDocument.LoadXml(xmlContent);
         return xmlDocument;
     };

    try
    {
        var document = GetXmlDocument(doc);
        var style = GetXmlDocument(File.ReadAllText(stylesheetPath));

        System.Xml.Xsl.XslCompiledTransform transform = new System.Xml.Xsl.XslCompiledTransform();
        transform.Load(style); // compiled stylesheet
        System.IO.StringWriter writer = new System.IO.StringWriter();
        XmlReader xmlReadB = new XmlTextReader(new StringReader(document.DocumentElement.OuterXml));
        transform.Transform(xmlReadB, null, writer);
        return writer.ToString();
    }
    catch (Exception ex)
    {
        throw ex;
    }

}   
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.