2011-06-13 59 views
2

我有一個「book.xml」和「book.xslt」輸出已設置爲文本模式,我不想通過瀏覽器加載文本文件,因爲它太重了我需要一些代碼將輸出文本文件保存在硬盤驅動器中。我如何通過c#實現這種轉換?在文件中保存xslt輸出轉換

+0

是否要保存文件在用戶的機器上,還是要將文件保存到服務器? – 2011-06-13 11:49:23

+0

我只需要在服務器上保存文件。 – kamiar3001 2011-06-13 11:51:27

+0

即將發佈我的答案,但它與Kev's相同..所以不需要 – 2011-06-13 12:01:05

回答

4

這應該工作:

XslCompiledTransform xslt = new XslCompiledTransform(); 
xslt.Load(@"c:\book.xslt"); 
xslt.Transform(@"c:\book.xml", @"c:\output.txt"); 

顯然,你的路將需要更新,以滿足您的特定情況,例如:

XslCompiledTransform xslt = new XslCompiledTransform(); 
xslt.Load(Server.MapPath("~/book.xslt")); 
xslt.Transform(Server.MapPath("~/book.xml"), Server.MapPath("~/output.txt")); 

這將從的根目錄讀取您的XSL文件並將其轉換爲/book.xml並將其保存到/output.txt

你可以找到更多關於這裏的System.Xml.Xsl.XslCompiledTransform類:

System.Xml.Xsl.XslCompiledTransform

1

使用System.Xml.Xsl.XslCompiledTransform類。

XslCompiledTransform transform = new XslCompiledTransform(); 
transform.Load(Server.MapPath("~/book.xslt")); 
transform.Transform(Server.MapPath("~/book.xml"), Server.MapPath("~/output.xml")); 

(注:這假定所有的文件都存儲在Web應用程序的根目錄)

0

通過使用xmwwriter和的XDocument像這樣:

using System.Data; 
using System.Xml; 
using System.Xml.XPath; 
using System.Xml.Xsl; 

public void xmltest(string xmlFilePath, string xslFilePath, string outFilePath) 
{ 
    var doc = new XPathDocument(xmlFilePath); 
    var writer = XmlWriter.Create(outFilePath); 
    var transform = new XslCompiledTransform(); 

    // The following two lines are only needed if you need scripting. 
    // Because of security considerations read up on that topic on MSDN first. 
    var settings = new XsltSettings(); 
    settings.EnableScript = true; 

    transform.Load(xslFilePath,settings,null); 

    transform.Transform(doc, writer); 

} 

此處瞭解詳情: http://msdn.microsoft.com/en-us/library/14689742.aspx

關於

+0

Transform方法有一個重載,它已經直接寫入文件而無需使用寫入器。在發動機罩下它已經使用了XmlWriter。 – Kev 2011-06-13 12:10:42

+0

另外,如果您直接使用'XmlWriter',則應該將其包裝在'using'語句中。 – Sven 2011-06-13 12:11:54

+0

ty。那麼xpathdocument和xslcompiledtransform呢?應該被包裹在使用中嗎? – Bjom 2011-06-14 01:09:00