วิธีการใช้สไตล์ชีท XSLT ใน C #


190

ฉันต้องการใช้สไตล์ชีท XSLT กับเอกสาร XML โดยใช้ C # และเขียนผลลัพธ์ไปยังไฟล์


11
จริงๆแล้วฉันคิดว่านี่เป็นคำถามที่ดีมากและคุณก็ให้คำตอบที่ดี เสนอชื่อเพื่อเปิดใหม่
Dominic Rodger

ฉันพบ Xslt ทำให้งงดังนั้นสิ่งนี้ช่วยฉันgithub.com/beto-rodriguez/SuperXml
bto.rdz

คำตอบ:


177

ฉันพบคำตอบที่เป็นไปได้ที่นี่: http://web.archive.org/web/20130329123237/http://www.csharpfriends.com/Articles/getArticle.aspx?articleID=63

จากบทความ:

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

แก้ไข:

แต่คอมไพเลอร์ที่เชื่อถือได้ของฉันบอกว่าXslTransformล้าสมัย: ใช้XslCompiledTransformแทน:

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

เนื่องจากฉันได้รับคำตอบบางส่วนของคุณเพื่อทำให้ชั้นเรียนที่ฉันกำลังเชื่อมโยงอยู่คิดว่าฉันจะใส่ไว้ในที่นี่ หวังว่ามันจะทำให้ทุกอย่างง่ายขึ้นสำหรับผู้คน: dftr.ca/?p=318
DFTR

ฉันชอบวิธีนี้แทนรุ่นที่โอเวอร์โหลดเพราะคุณสามารถตั้งค่าXmlReaderSettingsและXmlWriterSettingsโดยใช้ DTD, Schemas เป็นต้น
Alina B.

2
ฉันต้องทำใน VB.NET (ซึ่งเป็นภาษา "offspec" ของฉันฉันชอบ C #) และคำตอบของคุณนำไปสู่การแก้ปัญหาของฉัน ขอบคุณ
Eon

137

จากคำตอบที่ดีของ Daren โปรดทราบว่าโค้ดนี้สามารถย่อให้สั้นลงอย่างมากโดยใช้XslCompiledTransform.Transformที่เหมาะสม:

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

(ขออภัยที่โพสต์ข้อความนี้เป็นคำตอบ แต่การcode blockสนับสนุนในความคิดเห็นมี จำกัด

ใน VB.NET คุณไม่จำเป็นต้องมีตัวแปร:

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

16

นี่คือบทเรียนเกี่ยวกับวิธีการแปลง XSL ใน C # บน MSDN:

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

และนี่คือวิธีการเขียนไฟล์:

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

เช่นเดียวกับบันทึกด้านข้าง: หากคุณต้องการตรวจสอบความถูกต้องด้วยที่นี่เป็นอีกบทช่วยสอน (สำหรับ DTD, XDR และ XSD (= Schema)):

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

ฉันได้เพิ่มสิ่งนี้ไว้เพื่อให้ข้อมูลเพิ่มเติม


6
นี่คือคำตอบสำหรับลิงค์เท่านั้น โปรดระบุส่วนที่เกี่ยวข้องของหน้าที่เชื่อมโยง
โทมัสเวลเลอร์

1

สิ่งนี้อาจช่วยคุณได้

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

}   
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.