XslTransform против XslCompiledTransform - PullRequest
6 голосов
/ 05 марта 2009

Microsoft считает, что XslTransform устарела в пользу XslCompiledTransform. Теоретически, если бы я выполнял только одно преобразование во время выполнения моего приложения, разве интерпретация XSLT (через XslTransform) не должна быть быстрее, чем его компиляция? Если так, то XslTransform написан так плохо, что улучшения, внесенные в XslCompiledTransform, более чем компенсируют его?

Ответы [ 5 ]

4 голосов
/ 05 марта 2009

Возможно, вы захотите увидеть документированные различия между XslTransform и XslCompiledTransform здесь и здесь и принять решение самостоятельно .

Кроме того, в некоторых случаях XslTransform более несовместим. В XslCompiledTransform была проделана дополнительная работа по безопасности.

Итак, по многим причинам следует рассмотреть возможность использования нового XslCompiledTransform вместо старого XslTransform, даже в тех случаях, когда преобразование будет выполнено только один раз и может быть немного быстрее с старый XslTransform.

2 голосов
/ 09 сентября 2013

Как несвязанная точка данных, я просто потратил пару часов на отладку XSLT, которая раньше работала нормально и больше не работала. Оказалось, что XSLT был в порядке, проблема заключалась в том, что код, который его применял, некоторое время назад был обновлен с XslTransform (который работал отлично) до XslCompiledTransform (который плохо его преобразовывает), и это вызвало ошибку.

Итак, не в восторге от того, что XslTransform устарел, здесь, поскольку мне просто нужно было вернуть код для его использования ...: (

2 голосов
/ 05 марта 2009

Ну, у вас есть (медленное) время выполнения XslTransform по сравнению со временем компиляции XslCompiledTransform плюс его (быстрое) время выполнения. Не существует теоретического способа окончательно решить это сравнение.

Теория предполагает: время выполнения зависит от ввода и требуемых операций, а время компиляции зависит от сложности XSLT. Практика подтверждает, что при простом вводе и сложном XSLT одноразовое выполнение XslTransform определенно будет быстрее.

Однако для всех реальных приложений вы захотите XslCompiledTransform хотя бы потому, что XslTransform устарела и может содержать ошибки, которые никогда не будут исправлены. У меня на самом деле были некоторые таблицы стилей, которые странно вели себя в XslTransform и прекрасно работали в XslCompiledTransform.

1 голос
/ 05 марта 2009

Вы должны использовать XslCompiledTransform в любом случае, поскольку XslTransform устарела и может быть удалена из будущих версий платформы.

0 голосов
/ 01 августа 2014

У обоих есть свои плюсы и минусы. Я использую оба, но в другом сценарии. Я использую 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/>");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...