2008-08-29 32 views
159

Tôi muốn áp dụng Biểu định kiểu XSLT cho Tài liệu XML bằng C# và ghi đầu ra vào Tệp.Cách áp dụng Biểu định kiểu XSLT trong C#

+10

Thực ra, tôi nghĩ đây là một câu hỏi hay và bạn đã cung cấp một câu trả lời hay. Đề cử cho mở lại. –

+0

Tôi thấy Xslt khó hiểu, do đó, điều này đã giúp tôi https://github.com/beto-rodriguez/SuperXml –

Trả lời

154

Tôi tìm thấy một câu trả lời có thể ở đây: http://web.archive.org/web/20130329123237/http://www.csharpfriends.com/Articles/getArticle.aspx?articleID=63

Từ bài viết:

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:

Nhưng biên dịch đáng tin cậy của tôi nói, XslTransform là lỗi thời: Sử dụng XslCompiledTransform thay vì:

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

Vì tôi đã lấy một số câu trả lời của bạn để làm cho lớp mà tôi đang liên kết đến, nghĩ rằng tôi đã đặt nó như một bình luận ở đây Hy vọng rằng nó đơn giản hóa mọi thứ cho mọi người: http://dftr.ca/?p=318 – DFTR

+0

Tôi thích giải pháp này thay vì phiên bản quá tải vì bạn có thể đặt [XmlReaderSettings] (http://msdn.microsoft.com/ en-us/library/system.xml.xmlreadersettings% 28v = vs.110% 29.aspx) và [XmlWriterSettings] (http://msdn.microsoft.com/en-us/library/system.xml.xmlwritersettings%28v = vs.110% 29.aspx) sử dụng DTD, Schemas, vv –

+2

Tôi cần làm điều này trong VB.NET (ngôn ngữ "offspec" của tôi, tôi thích C#), và câu trả lời của bạn dẫn đến giải pháp của tôi. Cảm ơn – Eon

13

Đây là một hướng dẫn về làm thế nào để làm biến đổi XSL trong C# trên MSDN:

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

và ở đây làm thế nào để viết các tập tin:

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

cũng giống như một mặt lưu ý: nếu bạn cũng muốn xác thực ở đây là một hướng dẫn khác (cho DTD, XDR và ​​XSD (= Schema)):

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

tôi đã thêm điều này chỉ để cung cấp thêm một số thông tin.

+4

Đây là câu trả lời chỉ dành cho liên kết. Vui lòng bao gồm các phần liên quan của các trang được liên kết. –

116

Dựa trên câu trả lời tuyệt vời Daren của, lưu ý rằng mã này có thể được rút ngắn đáng kể bằng cách sử dụng thích hợp XslCompiledTransform.Transform overload:

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

(Xin lỗi vì tạo dáng này như là một câu trả lời, nhưng sự hỗ trợ code block trong ý kiến ​​là khá hạn chế .)

Trong VB.NET, bạn thậm chí không cần một biến:

With New XslCompiledTransform() 
    .Load("stylesheet.xsl") 
    .Transform("source.xml", "result.html") 
End With 
Các vấn đề liên quan