C # में XSLT स्टाइलशीट कैसे लागू करें


190

मैं एक XSLT स्टाइलशीट को C # का उपयोग करते हुए XML डॉक्यूमेंट में लागू करना चाहता हूं और आउटपुट को फाइल में लिखना चाहता हूं।


11
वास्तव में, मुझे लगता है कि यह एक महान प्रश्न है, और आपने एक अच्छा जवाब दिया है। फिर से खोलने के लिए नामांकित करना।
डोमिनिक रॉगर

मुझे 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

मैं इस समाधान को अतिभारित संस्करण के बजाय पसंद करता हूं क्योंकि आप DTD, स्कीमा, आदि का उपयोग करके XmlReaderSettings और XmlWriterSettings सेट करने में सक्षम हैं
Alina B.

2
मुझे VB.NET (जो मेरी "ऑफस्पेक" भाषा है, मुझे C # पसंद है) में ऐसा करने की जरूरत है, और आपके जवाब से मेरे समाधान का मार्ग प्रशस्त हुआ। धन्यवाद
अनंत काल

137

डैरन के उत्कृष्ट उत्तर के आधार पर, ध्यान दें कि उपयुक्त 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

MSDN पर C # में XSL ट्रांसफ़ॉर्मेशन कैसे करें, इसके बारे में एक ट्यूटोरियल है:

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

और यहां फाइलें कैसे लिखनी हैं:

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

एक साइड नोट के रूप में: यदि आप सत्यापन भी करना चाहते हैं, तो यहां एक और ट्यूटोरियल है (DTD, XDR और XSD (= स्कीमा) के लिए):

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

}   
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.