REMARQUE : cette classe est maintenant obsolète.
Transforme les données XML à l'aide d'une feuille de style XSLT (Extensible Stylesheet Language for Transformations). Espace de noms : System.Xml.XslAssembly : System.Xml (dans system.xml.dll)
<ObsoleteAttribute("This class has been deprecated. Please use System.Xml.Xsl.XslCompiledTransform instead. http://go.microsoft.com/fwlink/?linkid=14202")> _ Public NotInheritable Class XslTransform
Dim instance As XslTransform
[ObsoleteAttribute("This class has been deprecated. Please use System.Xml.Xsl.XslCompiledTransform instead. http://go.microsoft.com/fwlink/?linkid=14202")] public sealed class XslTransform
[ObsoleteAttribute(L"This class has been deprecated. Please use System.Xml.Xsl.XslCompiledTransform instead. http://go.microsoft.com/fwlink/?linkid=14202")] public ref class XslTransform sealed
/** @attribute ObsoleteAttribute("This class has been deprecated. Please use System.Xml.Xsl.XslCompiledTransform instead. http://go.microsoft.com/fwlink/?linkid=14202") */
public final class XslTransform
ObsoleteAttribute("This class has been deprecated. Please use System.Xml.Xsl.XslCompiledTransform instead. http://go.microsoft.com/fwlink/?linkid=14202") public final class XslTransform
Remarque |
|---|
| La classe XslTransform est obsolète dans le .NET Framework version 2.0. La classe XslCompiledTransform est le nouveau processeur XSLT. Pour plus d'informations, consultez Utilisation de la classe XslCompiledTransform et Migration depuis la classe XslTransform. |
XslTransform prend en charge la syntaxe XSLT 1.0. La feuille de style XSLT doit utiliser l'espace de noms http://www.w3.org/1999/xsl/transform.
Des arguments supplémentaires peuvent également être ajoutés à la feuille de style en utilisant la classe XsltArgumentList. Cette classe contient des paramètres d'entrée pour la feuille de style et des objets d'extension qui peuvent être appelés à partir de la feuille de style.
Pour transformer des données XML :
-
Créez un objet XslTransform.
-
Utilisez la méthode Load afin de charger la feuille de style pour la transformation. Cette méthode a plusieurs surcharges et peut charger une feuille de style en utilisant XmlReader, XPathNavigator, IXPathNavigable ou une URL avec l'emplacement du fichier.
-
Utilisez la méthode Transform pour transformer les données XML. Cette méthode a plusieurs surcharges et peut gérer différents types de données d'entrée et de sortie. Vous pouvez également spécifier un XsltArgumentList contenant des arguments supplémentaires à utiliser comme données d'entrée pendant la transformation.
Considérations sur la sécurité
Lorsque vous créez une application qui utilise la classe XslTransform, vous devez prendre en compte les éléments suivants et leurs conséquences :
-
Les objets d'extension sont activés par défaut. Si un objet XsltArgumentList contenant des objets d'extension est passé à la méthode Transform, ceux-ci sont utilisés.
-
Les feuilles de style XSLT peuvent inclure des références à d'autres fichiers et des blocs de script incorporés. Un utilisateur malveillant peut exploiter cette situation en vous fournissant des données ou des feuilles de style qui, lors de leur exécution, seront traitées par le système jusqu'à ce que l'ordinateur manque de ressources.
-
Avec des applications XSLT qui s'exécutent dans un environnement d'approbation mixte, une feuille de style peut être usurpée. Par exemple, un utilisateur malveillant peut charger un objet avec une feuille de style nuisible et le remettre à un autre utilisateur qui appelle par la suite la méthode Transform et exécute la transformation.
Il est possible d'atténuer ces problèmes de sécurité en refusant les objets XslTransform, les feuilles de style XSLT ou les sources de données XML émanant de sources non fiables.
Prise en charge de scripts
Cette classe prend en charge les scripts incorporés en utilisant l'élément msxsl:script.
Dans la version 1.1 du .NET Framework, la preuve de la feuille de style détermine les autorisations accordées aux scripts incorporés.
-
Si la feuille de style a été chargée à partir d'un URI (Uniform Resource Identifier), l'URI est utilisé pour créer la preuve. Cette preuve inclut l'URI avec son site et sa zone.
-
Si la feuille de style a été chargée en utilisant une autre source, vous pouvez fournir la preuve en passant un objet System.Security.Policy.Evidence à la méthode Load. Sinon, l'assembly du script bénéficie d'une confiance totale.
Appelants d'un niveau de confiance moyen : L'autorisation UnmanagedCode est requise pour compiler le script incorporé. L'autorisation ControlEvidence est requise pour fournir Evidence à la méthode Load. Une exception SecurityException est levée si l'appelant n'a pas les autorisations nécessaires. Pour plus d'informations, consultez System.Security.Permissions.SecurityPermission et System.Security.Permissions.SecurityPermissionFlag.
L'élément msxsl:script a les exigences suivantes :
-
L'élément msxsl:script doit appartenir à l'espace de noms urn:schemas-microsoft-com:xslt. La feuille de style doit inclure la déclaration de l'espace de noms xmlns:msxsl=urn:schemas-microsoft-com:xslt.
-
L'élément msxsl:script peut inclure un attribut language qui spécifie le langage de script à utiliser. L'attribut language doit avoir une des valeurs suivantes : C#, CSharp, VB, VisualBasic, JScript ou JavaScript. Étant donné que le nom du langage ne respecte pas la casse, JavaScript et javascript sont valides. Si un attribut language n'est pas spécifié, JScript est utilisé par défaut.
-
L'élément msxsl:script doit inclure un attribut implements-prefix qui contient le préfixe représentant l'espace de noms associé au bloc de script. Cet espace de noms doit être défini dans la feuille de style. Une feuille de style peut inclure plusieurs blocs de script regroupés par espace de noms. Il ne peut pas y avoir des blocs de script en plusieurs langues dans le même espace de noms. Les blocs de script peuvent appeler une fonction définie dans un autre bloc de script, à condition que les blocs de script se trouvent dans le même espace de noms. Le contenu d'un bloc de script est analysé conformément aux règles et à la syntaxe du langage de script (fourni par l'attribut language). Par exemple, dans un bloc de script C#, les commentaires sont préfixés par les caractères //. Les commentaires doivent être du contenu XML valide.
Note Il est recommandé d'encapsuler les blocs de script dans une section CDATA.
<msxsl:script implements-prefix='xy' language='C#'> <![CDATA[ // Add code here. ]]> </msxsl:script>
Les fonctions peuvent être déclarées dans l'élément msxsl:script. Le tableau suivant montre les espaces de noms qui sont pris en charge par défaut.
| Espaces de noms pris en charge | Description |
|---|---|
| System | Classes système. |
| System.Collection | Classes de collection. |
| System.Text | Classes de gestion du texte. |
| System.Xml | Classes XML principales. |
| System.Xml.Xsl | Classes XSLT. |
| System.Xml.XPath | Classes XPath (XML Path Language). |
Les arguments fournis et les valeurs de retour définies par les fonctions du script doivent correspondre à l'un des types W3C (World Wide Web Consortium) indiqués ci-dessous. Le tableau suivant détaille le mappage entre les types W3C, XPath ou XSLT, et les classes .NET correspondantes.
| Type W3C | Classe .NET équivalente |
|---|---|
| Chaîne (XPath) | System.String |
| Booléen (XPath) | System.Boolean |
| Nombre (XPath) | System.Double |
| Fragment d'arborescence de résultat (XSLT) | System.Xml.XPath.XPathNavigator |
| Ensemble de nœuds (XPath) | System.Xml.XPath.XPathNodeIterator |
Si la fonction du script utilise un des types numériques suivants : Int16, UInt16, Int32, UInt32, Int64, UInt64, Single ou Decimal, ces types sont convertis en Double, lequel correspond au nombre du type W3C XPath.
Une exception est levée lorsqu'une fonction appelée ne peut pas convertir le résultat de l'argument en un des types requis.
Remarque |
|---|
| msxsl:script et msxsl:node-list sont les seules fonctions de l'espace de noms urn:schemas-microsoft-com:xslt prises en charge par la classe XslTransform. |
XslTransform a la possibilité d'utiliser un code Common Language Runtime (CLR) comme mécanisme d'extension. Pour ce faire, une instance d'une classe est passée à la classe XslTransform et ses méthodes publiques appelées dans une feuille de style XSLT. Les méthodes qui sont définies avec le mot clé params, qui permet de passer un nombre non spécifié de paramètres, ne fonctionnent pas correctement dans ce scénario. Pour plus d'informations, consultez params (référence C#).
Pour plus d'informations, consultez Transformations XSLT avec la classe XslTransform.
L'exemple suivant transforme le document XML spécifié et renvoie le résultat dans la console.
'Create a new XslTransform object. Dim xslt As New XslTransform() 'Load the stylesheet. xslt.Load(CType("http://server/favorite.xsl", String)) 'Create a new XPathDocument and load the XML data to be transformed. Dim mydata As New XPathDocument("inputdata.xml") 'Create an XmlTextWriter which outputs to the console. Dim writer As New XmlTextWriter(Console.Out) 'Transform the data and send the output to the console. xslt.Transform(mydata, Nothing, writer, Nothing)
//Create a new XslTransform object. XslTransform xslt = new XslTransform(); //Load the stylesheet. xslt.Load("http://server/favorite.xsl"); //Create a new XPathDocument and load the XML data to be transformed. XPathDocument mydata = new XPathDocument("inputdata.xml"); //Create an XmlTextWriter which outputs to the console. XmlWriter writer = new XmlTextWriter(Console.Out); //Transform the data and send the output to the console. xslt.Transform(mydata,null,writer, null);
//Create a new XslTransform object. XslTransform^ xslt = gcnew XslTransform; //Load the stylesheet. xslt->Load( "http://server/favorite.xsl" ); //Create a new XPathDocument and load the XML data to be transformed. XPathDocument^ mydata = gcnew XPathDocument( "inputdata.xml" ); //Create an XmlTextWriter which outputs to the console. XmlWriter^ writer = gcnew XmlTextWriter( Console::Out ); //Transform the data and send the output to the console. xslt->Transform^(mydata,0,writer,0);
//Create a new XslTransform object.
XslTransform xslt = new XslTransform();
//Load the stylesheet.
xslt.Load("http://server/favorite.xsl");
//Create a new XPathDocument and load the XML data to be transformed.
XPathDocument myData = new XPathDocument("inputdata.xml");
//Create an XmlTextWriter which outputs to the console.
XmlWriter writer = new XmlTextWriter(Console.get_Out());
//Transform the data and send the output to the console.
xslt.Transform(myData, null, writer, null);
System.Xml.Xsl.XslTransform
Les objets XslTransform sont seulement thread-safe pour les opérations de transformation. Il n'est pas garanti que les autres opérations sont thread-safe. Vous devez également vérifier qu'aucune autre méthode n'est appelée sur l'objet pendant les opérations de chargement.
Windows 98, Windows 2000 SP4, Windows Millennium Edition, Windows Server 2003, Windows XP Édition Media Center, Windows XP Professionnel Édition x64, Windows XP SP2, Windows XP Starter Edition
Le .NET Framework ne prend pas en charge toutes les versions de chaque plate-forme. Pour obtenir la liste des versions prises en charge, consultez Configuration requise.
.NET Framework
Prise en charge dans : 1.0, 1.1Obsolète (avertissement du compilateur) dans 2.0
Remarque