2008-08-29 14 views
159

Je souhaite appliquer une feuille de style XSLT à un document XML en utilisant C# et écrire la sortie dans un fichier.Comment appliquer une feuille de style XSLT en C#

+10

En fait, je pense que c'est une excellente question, et vous avez fourni une bonne réponse. Nomination pour rouvrir –

+0

J'ai trouvé Xslt déroutant, donc cela m'a aidé https://github.com/beto-rodriguez/SuperXml –

Répondre

154

J'ai trouvé une réponse possible ici: http://web.archive.org/web/20130329123237/http://www.csharpfriends.com/Articles/getArticle.aspx?articleID=63

de l'article:

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:

Mais mon compilateur fidèle dit, XslTransform est obsolète: Utilisez XslCompiledTransform à la place:

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

Depuis que j'ai pris une partie de votre réponse pour faire le cours auquel je suis lié, je pensais que je le mettrais comme un commenter ici. J'espère que cela simplifie les choses pour les gens: http://dftr.ca/?p=318 – DFTR

+0

Je préfère cette solution à la place de la version surchargée parce que vous êtes en mesure de définir [XmlReaderSettings] (http://msdn.microsoft.com/ fr-fr/library/system.xml.xmlreadersettings% 28v = vs.110% 29.aspx) et [XmlWriterSettings] (http://msdn.microsoft.com/fr-fr/library/system.xml.xmlwritersettings%28v = vs.110% 29.aspx) en utilisant la DTD, les schémas, etc. –

+2

Je dois le faire dans VB.NET (qui est mon langage "offspec", je préfère C#), et votre réponse a conduit à ma solution. Merci – Eon

13

Voici un tutoriel sur la façon de faire des transformations XSL en C# sur MSDN:

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

et ici comment écrire des fichiers:

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

comme une note de côté: si vous voulez faire la validation aussi voici un autre tutoriel (pour DTD, XDR, et XSD (= schéma)):

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

J'ai ajouté ceci juste pour fournir plus d'informations.

+4

Ceci est une réponse de lien seulement. Veuillez inclure les parties pertinentes des pages liées. –

116

Basé sur une excellente réponse de Daren, notez que ce code peut être raccourci de manière significative en utilisant le XslCompiledTransform.Transform overload approprié:

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

(Désolé pour poser cela comme une réponse, mais le soutien code block dans les commentaires est plutôt limitée .)

En VB.NET, vous ne même pas besoin d'une variable:

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