2008-08-29 2 views
159

Я хочу применить таблицу стилей XSLT к XML-документу с помощью C# и записать вывод в файл.Как применить таблицу стилей XSLT в C#

+10

На самом деле, я думаю, это отличный вопрос, и вы дали хороший ответ. Назначение для повторного открытия. – 2009-12-22 11:56:31

+0

Я нашел Xslt запутанным, так что это помогло мне https://github.com/beto-rodriguez/SuperXml – 2015-08-26 18:02:18

ответ

154

Я нашел возможный ответ здесь: 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) ; 

Edit:

Но мой верный компилятор говорит, 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); 
+0

Поскольку я взял часть вашего ответа, чтобы создать класс, с которым я связан, подумал, что я бы назвал его комментарий здесь. Надеюсь, это упростит для людей: http://dftr.ca/?p=318 – DFTR 2013-03-25 23:44:25

13

Вот учебник о том, как сделать XSL Transformations в C# на MSDN:

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/

Я добавил это, чтобы предоставить дополнительную информацию.

116

Основываясь на превосходном ответе Дарен, в обратите внимание, что этот код может быть значительно сокращен, используя соответствующий XslCompiledTransform.Transform overload:

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 
Смежные вопросы