XslTransform似乎已被Microsoft弃用,转而使用XslCompiledTransform。从理论上讲,如果我在执行应用程序期间只进行一次转换,那么解释XSLT(通过XslTransform)是否应该比编译它更快?如果是这样,XslTransform是否写得如此糟糕以至于对XslCompiledTransform所做的改进不仅仅是对它的补偿呢?
答案 0 :(得分:4)
您可能希望查看XslTransform
和XslCompiledTransform
here和here之间记录的差异,并自行做出决定。
此外,在某些情况下,XslTransform更不符合要求。在XslCompiledTransform中对安全性做了更多的工作。
因此,有很多原因应该考虑使用新的XslCompiledTransform
而不是旧的XslTransform
,即使转化只运行一次也可以使用旧的XslTransform稍快一些。
答案 1 :(得分:2)
嗯,你有XslTransform的(慢)运行时间与XslCompiledTransform的编译时间加上它的(快速)运行时间。没有理论上的方法可以最终决定这种比较。
理论建议:运行时间取决于输入和所需的操作,编译时间取决于XSLT的复杂性。实践证实,通过简单的输入和复杂的XSLT,一次性执行XslTransform肯定会更快。
但是,对于所有实际应用程序,如果只是因为不推荐使用XslTransform并且可能包含永远不会修复的缺陷,那么您将需要XslCompiledTransform。我实际上有一些样式表在XslTransform下表现得很奇怪并且在XslCompiledTransform下运行得很好。
答案 2 :(得分:2)
作为一个不相关的数据点,我浪费了几个小时来调试过去工作正常而不再工作的XSLT。原来XSLT很好,问题是应用它的代码从XslTransform(它工作得很好)更新到XslCompiledTransform(它转换得很糟糕),不久之前,它触发了错误。
所以,不满意XslTransform被废弃,在这里,因为我只需要恢复代码使用它...... :(
答案 3 :(得分:1)
您应该在任何情况下使用XslCompiledTransform,因为XslTransform已被折旧,并且可能会从框架的未来版本中删除。
答案 4 :(得分: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("<br>", "<BR/>");