Bagaimana cara menerapkan XSLT Stylesheet di C #


190

Saya ingin menerapkan XSLT Stylesheet ke Dokumen XML menggunakan C # dan menulis output ke File.


11
Sebenarnya, saya pikir ini adalah pertanyaan yang bagus, dan Anda memberikan jawaban yang bagus. Nominasi untuk dibuka kembali.
— Dominic Rodger

Saya menemukan Xslt membingungkan, jadi ini membantu saya github.com/beto-rodriguez/SuperXml
— bto.rdz

Jawaban:


177

Saya menemukan jawaban yang mungkin di sini: http://web.archive.org/web/20130329123237/http://www.csharpfriends.com/Articles/getArticle.aspx?articleID=63

Dari artikel:

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

Edit:

Tetapi kompiler terpercaya saya mengatakan, XslTransformsudah usang: Gunakan XslCompiledTransformsaja:

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

Karena saya mengambil beberapa jawaban Anda untuk membuat kelas yang saya tautkan, saya pikir saya akan memberikan komentar di sini. Semoga ini menyederhanakan hal-hal untuk orang-orang: dftr.ca/?p=318
— DFTR

Saya lebih suka solusi ini daripada versi overload karena Anda dapat mengatur XmlReaderSettings dan XmlWriterSettings menggunakan DTD, Schemas, dll.
— Alina B.

2
Saya perlu melakukan ini dalam VB.NET (yang merupakan bahasa "offspec" saya, saya lebih suka C #), dan jawaban Anda mengarah ke solusi saya. Terima kasih
— Eon

137

Berdasarkan jawaban Daren yang sangat baik, perhatikan bahwa kode ini dapat dipersingkat secara signifikan dengan menggunakan XslCompiledTransform yang sesuai. Mentransformasi beban berlebih :

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

(Maaf karena menganggap ini sebagai jawaban, tetapi code blockdukungan dalam komentar agak terbatas.)

Di VB.NET, Anda bahkan tidak memerlukan variabel:

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

16

Berikut ini adalah tutorial tentang cara melakukan XSL Transformasi di C # di MSDN:

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

dan di sini cara menulis file:

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

seperti catatan tambahan: jika Anda ingin melakukan validasi juga di sini adalah tutorial lain (untuk DTD, XDR, dan XSD (= Skema)):

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

Saya menambahkan ini hanya untuk memberikan informasi lebih lanjut.


6
Ini hanya jawaban tautan. Harap sertakan bagian yang relevan dari halaman yang terhubung.
— Thomas Weller

1

Ini mungkin bisa membantu Anda

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;
    }

}   
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.