Partilhar via


Migrando da classe XslTransform

A arquitetura XSLT foi redesenhada na versão 2005 do Visual Studio. A XslTransform classe foi substituída XslCompiledTransform pela classe.

As seções a seguir descrevem algumas das principais diferenças entre as XslCompiledTransform classes e XslTransform as classes.

Desempenho

A XslCompiledTransform classe inclui muitas melhorias de desempenho. O novo processador XSLT compila a folha de estilos XSLT para um formato intermediário comum, semelhante ao que o Common Language Runtime (CLR) faz para outras linguagens de programação. Uma vez compilada, a folha de estilos pode ser armazenada em cache e reutilizada.

A XslCompiledTransform classe também inclui outras otimizações que a tornam muito mais rápida do que a XslTransform classe.

Nota

Embora o desempenho geral da XslCompiledTransform classe seja melhor do que a XslTransform classe, o Load método da XslCompiledTransform classe pode ter um desempenho mais lento do que o Load método da XslTransform classe na primeira vez que é chamado em uma transformação. Isso ocorre porque o arquivo XSLT deve ser compilado antes de ser carregado. Para obter mais informações, consulte a seguinte postagem no blog: XslCompiledTransform Sslow than XslTransform?

Segurança

Por padrão, a classe desabilita XslCompiledTransform o suporte para a função XSLT document() e scripts incorporados. Esses recursos podem ser habilitados criando um XsltSettings objeto que tenha os recursos habilitados e passando-o para o Load método. O exemplo a seguir mostra como habilitar scripts e executar uma transformação XSLT.

Nota

Os blocos de script são suportados apenas no .NET Framework. Eles não são suportados no .NET Core ou .NET 5 ou posterior.

// Create the XsltSettings object with script enabled.
XsltSettings settings = new XsltSettings(false,true);

// Execute the transform.
XslCompiledTransform xslt = new XslCompiledTransform();
xslt.Load("calc.xsl", settings, new XmlUrlResolver());
xslt.Transform("books.xml", "books.html");
' Create the XsltSettings object with script enabled.
Dim settings As New XsltSettings(False, True)

' Execute the transform.
Dim xslt As New XslCompiledTransform()
xslt.Load("calc.xsl", settings, New XmlUrlResolver())
xslt.Transform("books.xml", "books.html")

Para obter mais informações, consulte Considerações de segurança XSLT.

Novos recursos

Arquivos temporários

Às vezes, arquivos temporários são gerados durante o processamento XSLT. Se uma folha de estilos contiver blocos de script ou se for compilada com a configuração de depuração definida como true, arquivos temporários poderão ser criados na pasta %TEMP%. Pode haver casos em que alguns arquivos temporários não são excluídos devido a problemas de tempo. Por exemplo, se os arquivos estiverem em uso pelo AppDomain atual ou pelo depurador, o TempFileCollection finalizador do objeto não poderá removê-los.

A TemporaryFiles propriedade pode ser usada para limpeza adicional para garantir que todos os arquivos temporários sejam removidos do cliente.

Suporte para o elemento xsl:output e XmlWriter

A XslTransform classe ignorou xsl:output as configurações quando a saída da transformação foi enviada para um XmlWriter objeto. A XslCompiledTransform classe tem uma OutputSettings propriedade que retorna um XmlWriterSettings objeto que contém as informações de saída derivadas do xsl:output elemento da folha de estilos. O XmlWriterSettings objeto é usado para criar um XmlWriter objeto com as configurações corretas que podem ser passadas para o Transform método. O seguinte código C# ilustra esse comportamento:

// Create the XslTransform object and load the style sheet.
XslCompiledTransform xslt = new XslCompiledTransform();
xslt.Load(stylesheet);

// Load the file to transform.
XPathDocument doc = new XPathDocument(filename);

// Create the writer.
XmlWriter writer = XmlWriter.Create(Console.Out, xslt.OutputSettings);

// Transform the file and send the output to the console.
xslt.Transform(doc, writer);
writer.Close();

Opção de depuração

A XslCompiledTransform classe pode gerar informações de depuração, o que permite depurar a folha de estilos com o depurador do Microsoft Visual Studio. Consulte XslCompiledTransform(Boolean) para obter mais informações.

Diferenças comportamentais

Transformando em um XmlReader

A XslTransform classe tem várias sobrecargas Transform que retornam resultados de transformação como um XmlReader objeto. Essas sobrecargas podem ser usadas para carregar os resultados da transformação em uma representação na memória (como XmlDocument ou XPathDocument) sem incorrer na sobrecarga de serialização e desserialização da árvore XML resultante. O código C# a seguir mostra como carregar os resultados da transformação em um XmlDocument objeto.

// Load the style sheet
XslTransform xslt = new XslTransform();
xslt.Load("MyStylesheet.xsl");

// Transform input document to XmlDocument for additional processing
XmlDocument doc = new XmlDocument();
doc.Load(xslt.Transform(input, (XsltArgumentList)null));

A XslCompiledTransform classe não suporta a transformação em um XmlReader objeto. No entanto, você pode fazer algo semelhante usando o CreateNavigator método para carregar a árvore XML resultante diretamente de um XmlWriterarquivo . O código C# a seguir mostra como realizar a mesma tarefa usando XslCompiledTransformo .

// Transform input document to XmlDocument for additional processing
XmlDocument doc = new XmlDocument();
using (XmlWriter writer = doc.CreateNavigator().AppendChild()) {
    xslt.Transform(input, (XsltArgumentList)null, writer);
}

Comportamento Discricionário

A Recomendação de Transformações XSL (XSLT) Versão 1.0 do W3C inclui áreas nas quais o provedor de implementação pode decidir como lidar com uma situação. Estas áreas são consideradas como comportamento discricionário. Há várias áreas em que o XslCompiledTransform comportamento se comporta de forma diferente da XslTransform classe. Para obter mais informações, consulte Erros XSLT recuperáveis.

Objetos de extensão e funções de script

XslCompiledTransform introduz duas novas restrições à utilização de funções de script:

  • Somente métodos públicos podem ser chamados a partir de expressões XPath.

  • As sobrecargas são distinguíveis umas das outras com base no número de argumentos. Se mais de uma sobrecarga tiver o mesmo número de argumentos, uma exceção será gerada.

No XslCompiledTransform, uma associação (pesquisa de nome de método) a funções de script ocorre em tempo de compilação, e folhas de estilo que trabalharam com XslTransform podem causar uma exceção quando são carregadas com XslCompiledTransform.

XslCompiledTransform suporta elementos ter msxsl:using e msxsl:assembly filho dentro do msxsl:script elemento . Os msxsl:using elementos e msxsl:assembly são usados para declarar namespaces e assemblies adicionais para uso no bloco de script. Consulte Blocos de script usando msxsl:script para obter mais informações.

XslCompiledTransform Proíbe objetos de extensão que têm várias sobrecargas com o mesmo número de argumentos.

Funções do MSXML

Suporte para funções MSXML adicionais foram adicionados à XslCompiledTransform classe. A lista a seguir descreve funcionalidades novas ou aprimoradas:

Consulte também