Compartilhar via


Migrar da classe XslTransform

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

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

Desempenho

A classe de XslCompiledTransform inclui muitos aprimoramentos de desempenho. O novo processador XSLT compila a folha de estilos XSLT para baixo em um formato intermediário comuns, semelhante ao que o Common Language Runtime (CLR) faz para outras linguagens de programação. Uma vez que a folha de estilos é compilada, pode ser armazenada em cachê e reutilizado.

A classe de XslCompiledTransform também inclui outras otimizações que o torna muito mais rápido que a classe de XslTransform .

Observação

Embora o desempenho geral da classe XslCompiledTransform seja melhor do que o da classe XslTransform, o método Load da classe XslCompiledTransform possivelmente apresentará um desempenho mais lento do que o método Load da classe XslTransform na primeira vez que for chamado em uma transformação. Isso ocorre porque o arquivo XSLT deve ser compilado antes que seja carregado. Para saber mais, confira a postagem de blog a seguir: XslCompiledTransform mais lento do que XslTransform?

Segurança

Por padrão, o suporte desativa da classe de XslCompiledTransform para a função XSLT document() e script inserido. Esses recursos podem ser ativados criando um objeto de XsltSettings que possui os recursos ativados e que passa para o método de Load . O exemplo a seguir mostra como habilitar scripts e executar uma transformação XSLT.

Observação

Os blocos de script têm suporte apenas no .NET Framework. Não há suporte para eles no .NET Core ou no .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 saber mais, confira Considerações sobre segurança relacionadas à reflexão.

Novos recursos

Arquivos temporários

Os arquivos temporários são gerados às vezes durante processamento XSLT. Se uma folha de estilos contém blocos de script, ou se é criada com a configuração de depuração definida para retificar, os arquivos temporários podem ser criados na pasta % temp %. Pode haver instâncias quando alguns arquivos temporários não são excluídos devido a problemas de tempo. Por exemplo, se os arquivos estão em uso por Appdomain atual ou o depurador, o finalizer do objeto de TempFileCollection não poderá removê-los.

A propriedade de TemporaryFiles pode ser usada para que a limpeza adicional certifique-se de que todos os arquivos temporários são removidos de cliente.

Suporte para o XSL: elemento e XmlWriter de saída

A classe de XslTransform ignorada configurações de xsl:output quando a saída transformação foram enviados a um objeto de XmlWriter . A classe de XslCompiledTransform tem uma propriedade de OutputSettings que retorna um objeto de XmlWriterSettings que contém informações de saída derivada de elemento de xsl:output folha de estilos. O objeto de XmlWriterSettings é usado para criar um objeto de XmlWriter com as configurações corretas que podem ser passada para o método de Transform . O código a seguir em 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 classe de XslCompiledTransform pode gerar informações de depuração, que permite você depurar a folha de estilos com o Depurador do Microsoft Visual Studio. Consulte XslCompiledTransform(Boolean) para obter mais informações.

Diferenças de comportamento

Uma transformação a um XmlReader

A classe de XslTransform tiver vários transformar as sobrecargas que a transformação de retorno resultados como um objeto de XmlReader . Essas sobrecargas podem ser usadas para carregar os resultados de transformação em uma representação em memória (como XmlDocument ou XPathDocument) sem incorrer a sobrecarga de serialização e desserialização de árvore XML resultante. O código a seguir em c mostra como carregar os resultados de transformação em um objeto de XmlDocument .

// 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 classe de XslCompiledTransform não oferece suporte a XmlReader transformar um objeto. No entanto, você pode fazer algo semelhante usando o método CreateNavigator para carregar a árvore resultante XML diretamente de XmlWriter. O código a seguir em c mostra como realizar a mesma tarefa usando XslCompiledTransform.

// 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 arbitrário

A recomendação de versão 1,0 do W3C de transformações XSL (XSLT) inclui as áreas no qual o provedor de implementação pode decidir como manipular uma situação. Essas áreas são consideradas como comportamento arbitrário. Há várias áreas onde XslCompiledTransform se comporta de forma diferente do que a classe de XslTransform . Para saber mais, confira Erros recuperáveis de XSLT.

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

XslCompiledTransform apresenta duas novas restrições sobre o uso de funções de script:

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

  • Sobrecargas são distinguíveis de se com base no número de argumentos. Se mais de uma sobrecarga tem o mesmo número de argumentos, uma exceção será lançada.

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

suporte deXslCompiledTransform que têm msxsl:using e elementos filho de msxsl:assembly dentro do elemento de msxsl:script . Os elementos de msxsl:using e de msxsl:assembly são usados para declarar namespaces e assemblies adicionais para uso no bloco de script. Para saber mais, confira Blocos de script usando msxsl:script.

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

Funções de MSXML

Suporte para funções adicionais de MSXML foi adicionado à classe de XslCompiledTransform . A lista a seguir descreve a funcionalidades novas ou aprimorada:

Confira também