C#でXSLTスタイルシートを適用する方法


回答:


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=

あなたが設定できますので、私が代わりにオーバーロードされたバージョンのこのソリューションを好むXmlReaderSettingsXmlWriterSettingsなどDTD、スキーマ、使用して
アリーナB.

2
私はこれをVB.NET(私の「オフスペック」言語です、私はC#が好きです)で行う必要があり、あなたの答えが私の解決策につながりました。ありがとう
Eon

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
これはリンクのみの回答です。リンク先ページの関連部分を含めてください。
Thomas Weller、

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.