Tôi muốn áp dụng Biểu định kiểu XSLT cho Tài liệu XML bằng C # và ghi kết quả đầu ra vào Tệp.
Tôi muốn áp dụng Biểu định kiểu XSLT cho Tài liệu XML bằng C # và ghi kết quả đầu ra vào Tệp.
Câu trả lời:
Tôi đã tìm thấy một câu trả lời có thể có tại đâ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) ;
Biên tập:
Nhưng trình biên dịch đáng tin cậy của tôi nói, XslTransform
đã lỗi thời: Sử dụng XslCompiledTransform
thay thế:
XPathDocument myXPathDoc = new XPathDocument(myXmlFile) ;
XslCompiledTransform myXslTrans = new XslCompiledTransform();
myXslTrans.Load(myStyleSheet);
XmlTextWriter myWriter = new XmlTextWriter("result.html",null);
myXslTrans.Transform(myXPathDoc,null,myWriter);
Dựa trên câu trả lời tuyệt vời của Daren, lưu ý rằng mã này có thể được rút ngắn đáng kể bằng cách sử dụng quá tải XslCompiledTransform.Transform thích hợp :
var myXslTrans = new XslCompiledTransform();
myXslTrans.Load("stylesheet.xsl");
myXslTrans.Transform("source.xml", "result.html");
(Xin lỗi vì đặt câu hỏi này như một câu trả lời, nhưng sự code block
hỗ trợ trong các bình luận 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
Dưới đây là hướng dẫn về cách thực hiện Chuyển đổi XSL trong C # trên MSDN:
http://support.microsoft.com/kb/307322/en-us/
và đây là cách viết tập tin:
http://support.microsoft.com/kb/816149/vi-us
chỉ là một lưu ý phụ: nếu bạn cũng muốn xác thực thì đây là một hướng dẫn khác (dành 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.
Điều này có thể giúp bạn
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;
}
}