Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net XslTransform与XslCompiledTransform_.net_Xslt_Xslcompiledtransform - Fatal编程技术网

.net XslTransform与XslCompiledTransform

.net XslTransform与XslCompiledTransform,.net,xslt,xslcompiledtransform,.net,Xslt,Xslcompiledtransform,XslTransform似乎已被Microsoft弃用,取而代之的是XslCompiledTransform。从理论上讲,如果我在应用程序执行期间只进行一次转换,那么解释XSLT(通过XslTransform)不应该比编译它更快吗?如果是这样的话,XslTransform的编写是否如此糟糕,以至于对XslCompiledTransform所做的改进远远弥补了它的不足?好吧,XslTransform的运行时间(慢)与XslCompiledTransform的编译时间加上(快)运行时间相比。从理论上

XslTransform似乎已被Microsoft弃用,取而代之的是XslCompiledTransform。从理论上讲,如果我在应用程序执行期间只进行一次转换,那么解释XSLT(通过XslTransform)不应该比编译它更快吗?如果是这样的话,XslTransform的编写是否如此糟糕,以至于对XslCompiledTransform所做的改进远远弥补了它的不足?

好吧,XslTransform的运行时间(慢)与XslCompiledTransform的编译时间加上(快)运行时间相比。从理论上讲,没有办法最终确定这种比较

理论表明:运行时间取决于输入和所需的操作,而编译时间取决于XSLT的复杂性。实践证明,使用简单的输入和复杂的XSLT一次性执行XslTransform肯定会更快


但是,对于所有实际的应用程序,如果只是因为XslTransform已被弃用,并且可能包含永远无法修复的缺陷,那么您将需要XslCompiledTransform。事实上,我有一些样式表在XslTransform下表现得很奇怪,在XslCompiledTransform下运行得很好。

在任何情况下都应该使用XslCompiledTransform,因为XslTransform会贬值,可能会从框架的未来版本中删除

您可能希望看到
XslTransform
xslcomiledtransform
之间的差异,并自己做出决定

此外,在某些情况下XslTransform更不符合要求。在XslCompiledTransform的安全性方面做了更多的工作


<> P><强>所以,我们应该考虑使用新的<代码> xScCopyLeDebug 代替旧的代码> xSListabs<强>,即使在转换只运行一次的情况下,用旧的XSListToor稍微快一点。

< P>作为一个不相关的数据点,我只是浪费了几个小时调试一个XSLT,这个XSLT过去工作得很好,现在不再工作了。结果证明XSLT是好的,问题是应用它的代码在不久前从XslTransform(工作得很好)更新为XslCompiledTransform(转换得很糟糕),从而触发了错误


因此,我对XslTransform被淘汰感到不高兴,因为我只是需要还原代码才能使用它…:(

两者都有各自的优点和缺点。我使用两者,但情况不同。我使用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/>");
System.Web.UI.WebControls.Xml objXML=new System.Web.UI.WebControls.Xml();
System.IO.StringWriter objTextWriter=新的System.IO.StringWriter();
System.Web.UI.HtmlTextWriter objHtmlTextWriter=新建System.Web.UI.HtmlTextWriter(objTextWriter);
XslTransform objTrans=新的XslTransform();
Load(HttpContext.Current.Server.MapPath(strXslFileName));
objXML.TransformArgumentList=objArgsList;
Transform=objTrans;
Document=objOutputXml;
RenderControl(objHtmlTextWriter);
返回objTextWriter.ToString();
xslcomiledtransformobjtrans=new System.Xml.Xsl.xslcomiledtransform();
System.IO.StringWriter objStringReader=新的System.IO.StringWriter();
Load(HttpContext.Current.Server.MapPath(strXslFileName));
Transform(objOutputXml、objArgsList、objstringrader);
返回objStringReader.ToString().Replace(“br”,“
”);
请注意,在一些复杂的转换上,不管编译开销如何,XslCompiledTransform可能比XslTransform慢得多。我仍在与MS技术支持部门合作,以确定问题的确切原因,但有一种情况是XslCompiledTransform的性能差得多。不过,这似乎是一种非常严重的情况,所以一般来说,我绝对同意XslCompiledTransform是preferable@Andy,是的,没有人能确认XslCompiledTransform对于所有的、无限数量的转换都更快。我们从经验中知道,它通常更快。它现在被标记为过时