2009-03-05 56 views
6

XslTransform似乎已被Microsoft棄用,轉而使用XslCompiledTransform。從理論上講,如果我在執行應用程序時只做了一次轉換,不應該通過XSLT解析XSLT比編譯它快嗎?如果是這樣,XslTransform寫得如此糟糕,以至於對XslCompiledTransform所作的改進不僅僅是彌補它?XslTransform與XslCompiledTransform

回答

4

您可能希望看到XslTransformXslCompiledTransformherehere之間的記錄差異,自己做出決定。

另外,有些情況下XslTransform更不符合要求。在XslCompiledTransform中進行了更多的工作。

所以,很多人應該考慮使用新的XslCompiledTransform,而不是舊XslTransform,即使在轉型將只運行一次,並可能與老的XslTransform稍快的情況下的原因。

2

好了,你有(慢)運行的XslTransform主場迎戰XslCompiledTransform加上其(快)運行時間的編譯時間時間。沒有理論的方法來決定這個比較。

理論認爲:運行時間取決於輸入所需的操作和編譯時間取決於XSLT的複雜性。實踐證明,通過簡單的輸入和複雜的XSLT,一次執行XslTransform肯定會更快。

然而,對於所有的實際應用中,你會想,如果只XslCompiledTransform爲事實的XslTransform被棄用,很可能含有缺陷,永遠無法修復。實際上我有一些樣式表在XslTransform下行爲異常,並且在XslCompiledTransform下完美運行。

1

以來的XslTransform折舊並且可以從框架的未來版本中刪除你應該在任何情況下使用XslCompiledTransform。

+1

它尚未被標記爲「過時」,但是... – 2012-03-20 14:05:44

+0

現在標記爲過時 – 2017-03-10 11:45:34

2

到無關的數據點,我只是浪費了幾個小時的調試用於正常工作,不再做了XSLT。結果發現XSLT沒問題,問題在於應用它的代碼從XslTransform(完美工作)更新到XslCompiledTransform(它很糟糕地轉換它),並且引發了錯誤。

所以,不愉快的XslTransform將過時,在這裏,我只是要恢復到使用它的代碼... :(

0

兩者都有自己的優點和缺點。我使用的,但兩者在不同的場景。我使用的XslTransform通過輸出到一個XML控制變量,並寫在字面上的控制輸出,但是當我需要傳遞給網頁XML控制,然後我需要XslCompiledTransform,這是因爲這兩種方法的輸出是不同的。

System.Web.UI.WebControls.Xml objXML = new System.Web.UI.WebControls.Xml(); 
     System.IO.StringWriter objTextWriter = new System.IO.StringWriter(); 
     System.Web.UI.HtmlTextWriter objHtmlTextWriter = new System.Web.UI.HtmlTextWriter(objTextWriter); 
     XslTransform objTrans = new XslTransform(); 
     objTrans.Load(HttpContext.Current.Server.MapPath(strXslFileName)); 
     objXML.TransformArgumentList = objArgsList; 
     objXML.Transform = objTrans; 
     objXML.Document = objOutputXml; 
     objXML.RenderControl(objHtmlTextWriter); 
     return objTextWriter.ToString(); 



XslCompiledTransform objTrans = new System.Xml.Xsl.XslCompiledTransform(); 
     System.IO.StringWriter objStringReader = new System.IO.StringWriter(); 
     objTrans.Load(HttpContext.Current.Server.MapPath(strXslFileName)); 
     objTrans.Transform(objOutputXml, objArgsList, objStringReader); 
     return objStringReader.ToString().Replace("&lt;br&gt;", "<BR/>"); 
相關問題