Partager via


Migration à partir de la classe XslTransform

L’architecture XSLT a été repensée dans la version de Visual Studio 2005. La XslTransform classe a été remplacée par la XslCompiledTransform classe.

Les sections suivantes décrivent certaines des principales différences entre les XslCompiledTransform classes et les XslTransform classes.

Performances

La XslCompiledTransform classe inclut de nombreuses améliorations des performances. Le nouveau processeur XSLT compile la feuille de style XSLT vers le bas dans un format intermédiaire commun, similaire à ce que fait le COMMON Language Runtime (CLR) pour d’autres langages de programmation. Une fois la feuille de style compilée, elle peut être mise en cache et réutilisée.

La XslCompiledTransform classe inclut également d’autres optimisations qui le rendent beaucoup plus rapide que la XslTransform classe.

Remarque

Bien que les performances globales de la XslCompiledTransform classe soient meilleures que la XslTransform classe, la Load méthode de la XslCompiledTransform classe peut s’exécuter plus lentement que la Load méthode de la XslTransform classe la première fois qu’elle est appelée sur une transformation. Cela est dû au fait que le fichier XSLT doit être compilé avant son chargement. Pour plus d’informations, consultez le billet de blog suivant : XslCompiledTransform Slower than XslTransform ?

Sécurité

Par défaut, la XslCompiledTransform classe désactive la prise en charge de la fonction XSLT document() et des scripts incorporés. Ces fonctionnalités peuvent être activées en créant un XsltSettings objet sur lequel les fonctionnalités sont activées et en les transmettant à la Load méthode. L’exemple suivant montre comment activer le script et effectuer une transformation XSLT.

Remarque

Les blocs de script sont pris en charge uniquement dans .NET Framework. Ils ne sont pas pris en charge sur .NET Core ou .NET 5 ou version ultérieure.

// 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")

Pour plus d’informations, consultez Considérations relatives à la sécurité XSLT.

Nouvelles fonctionnalités

Fichiers temporaires

Les fichiers temporaires sont parfois générés pendant le traitement XSLT. Si une feuille de style contient des blocs de script ou si elle est compilée avec le paramètre de débogage défini sur true, les fichiers temporaires peuvent être créés dans le dossier %TEMP%. Il peut arriver que certains fichiers temporaires ne soient pas supprimés en raison de problèmes de minutage. Par exemple, si les fichiers sont utilisés par l’AppDomain actuel ou par le débogueur, le finaliseur de l’objet TempFileCollection ne pourra pas les supprimer.

La TemporaryFiles propriété peut être utilisée pour un nettoyage supplémentaire pour vous assurer que tous les fichiers temporaires sont supprimés du client.

Prise en charge de l’élément xsl :output et xmlWriter

La XslTransform classe a ignoré les xsl:output paramètres lorsque la sortie de transformation a été envoyée à un XmlWriter objet. La XslCompiledTransform classe a une OutputSettings propriété qui retourne un XmlWriterSettings objet contenant les informations de sortie dérivées de l’élément xsl:output de la feuille de style. L’objet XmlWriterSettings est utilisé pour créer un XmlWriter objet avec les paramètres appropriés qui peuvent être passés à la Transform méthode. Le code C# suivant illustre ce comportement :

// 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();

Debug Option

La XslCompiledTransform classe peut générer des informations de débogage, ce qui vous permet de déboguer la feuille de style avec le débogueur Microsoft Visual Studio. Pour plus d’informations, consultez XslCompiledTransform(Boolean).

Différences comportementales

Transformation en XmlReader

La XslTransform classe a plusieurs surcharges de transformation qui retournent des résultats de transformation en tant qu’objet XmlReader . Ces surcharges peuvent être utilisées pour charger les résultats de la transformation dans une représentation en mémoire (par exemple XmlDocument ) XPathDocumentsans entraîner la surcharge de sérialisation et de désérialisation de l’arborescence XML résultante. Le code C# suivant montre comment charger les résultats de la transformation dans un XmlDocument objet.

// 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));

La XslCompiledTransform classe ne prend pas en charge la transformation en objet XmlReader . Toutefois, vous pouvez faire quelque chose de similaire à l’aide de la CreateNavigator méthode pour charger l’arborescence XML résultante directement à partir d’un XmlWriter. Le code C# suivant montre comment accomplir la même tâche à l’aide XslCompiledTransformde .

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

Comportement discrétionnaire

La recommandation W3C XSL Transformations (XSLT) version 1.0 inclut les domaines dans lesquels le fournisseur d’implémentation peut décider comment gérer une situation. Ces domaines sont considérés comme un comportement discrétionnaire. Il existe plusieurs zones où le XslCompiledTransform comportement diffère de la XslTransform classe. Pour plus d’informations, consultez Erreurs XSLT récupérables.

Objets d’extension et fonctions de script

XslCompiledTransform introduit deux nouvelles restrictions sur l’utilisation des fonctions de script :

  • Seules les méthodes publiques peuvent être appelées à partir d’expressions XPath.

  • Les surcharges sont distinguées les unes des autres en fonction du nombre d’arguments. Si plusieurs surcharges ont le même nombre d’arguments, une exception est levée.

Dans XslCompiledTransform, une liaison (recherche de nom de méthode) aux fonctions de script se produit au moment de la compilation, et les feuilles de style qui ont travaillé avec XslTransform peuvent provoquer une exception lorsqu’elles sont chargées avec XslCompiledTransform.

XslCompiledTransform prend en charge l’avoir msxsl:using et msxsl:assembly les éléments enfants dans l’élément msxsl:script . Les msxsl:using éléments et msxsl:assembly les espaces de noms supplémentaires sont utilisés pour déclarer des espaces de noms et des assemblys supplémentaires à utiliser dans le bloc de script. Pour plus d’informations , consultez Blocs de script à l’aide de msxsl :script .

XslCompiledTransform interdit les objets d’extension qui ont plusieurs surcharges avec le même nombre d’arguments.

Fonctions MSXML

La prise en charge des fonctions MSXML supplémentaires a été ajoutée à la XslCompiledTransform classe. La liste suivante décrit les fonctionnalités nouvelles ou améliorées :

Voir aussi