Freigeben über


XslTransform-Klasse

HINWEIS: Diese Klasse ist mittlerweile veraltet.

Transformiert XML-Daten unter Verwendung eines XSLT (Extensible Stylesheet Language for Transformations)-Stylesheets.

Namespace: System.Xml.Xsl
Assembly: System.Xml (in system.xml.dll)

Syntax

'Declaration
<ObsoleteAttribute("This class has been deprecated. Please use System.Xml.Xsl.XslCompiledTransform instead. https://go.microsoft.com/fwlink/?linkid=14202")> _
Public NotInheritable Class XslTransform
'Usage
Dim instance As XslTransform
[ObsoleteAttribute("This class has been deprecated. Please use System.Xml.Xsl.XslCompiledTransform instead. https://go.microsoft.com/fwlink/?linkid=14202")] 
public sealed class XslTransform
[ObsoleteAttribute(L"This class has been deprecated. Please use System.Xml.Xsl.XslCompiledTransform instead. https://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. https://go.microsoft.com/fwlink/?linkid=14202") */ 
public final class XslTransform
ObsoleteAttribute("This class has been deprecated. Please use System.Xml.Xsl.XslCompiledTransform instead. https://go.microsoft.com/fwlink/?linkid=14202") 
public final class XslTransform

Hinweise

Hinweis

Die XslTransform-Klasse ist in Microsoft .NET Framework, Version 2.0, veraltet. Der neue XSLT-Prozessor ist die XslCompiledTransform-Klasse. Weitere Informationen finden Sie unter Verwenden der XslCompiledTransform-Klasse und Migrieren von der XslTransform-Klasse.

XslTransform unterstützt die Syntax von XSLT 1.0. Das XSLT-Stylesheet muss den **http://www.w3.org/1999/xsl/transform**-Namespace verwenden.

Außerdem können dem Stylesheet mithilfe der XsltArgumentList-Klasse weitere Argumente hinzugefügt werden. Diese Klasse enthält Eingabeparameter für das Stylesheetobjekt und das Erweiterungsobjekt, die aus dem Stylesheet aufgerufen werden können.

So wandeln Sie XML-Daten um:

  1. Erstellen Sie ein XslTransform-Objekt.

  2. Verwenden Sie die Load-Methode zum Laden des Stylesheets für die Transformation. Diese Methode verfügt über mehrere Überladungen und kann ein Stylesheet unter Verwendung von XmlReader, XPathNavigator, IXPathNavigable oder eines URLs mit dem Speicherort der Datei laden.

  3. Verwenden Sie zum Transformieren der XML-Daten die Transform-Methode. Diese Methode verfügt über mehrere Überladungen und kann verschiedene Eingabe- und Ausgabetypen behandeln. Sie können auch eine XsltArgumentList angeben, die weitere Argumente für die Verwendung als Eingabe während der Transformation enthält.

Sicherheitsüberlegungen

Bei der Erstellung einer Anwendung, die die XslTransform-Klasse verwendet, sollten Ihnen die folgenden Elemente und deren Bedeutung bekannt sein:

  • Erweiterungsobjekte sind in der Standardeinstellung aktiviert. Wenn ein XsltArgumentList-Objekt, das Erweiterungsobjekte enthält, an die Transform-Methode übergeben wird, werden diese verwendet.

  • XSLT-Stylesheets können Verweise auf andere Dateien und eingebettete Skriptblöcke enthalten. Böswillige Benutzer können dies ausnutzen und Ihnen Daten oder Stylesheets zukommen lassen, die bei der Ausführung im System eine Verarbeitungslast bis zur Erschöpfung der Ressourcen erzeugen.

  • XSLT-Anwendungen, die in einer Umgebung mit unterschiedlichen Vertrauensebenen ausgeführt werden, können zu Stylesheetspoofing führen. So kann z. B. ein böswilliger Benutzer ein Objekt mit einem schädlichen Stylesheet laden und an einen anderen Benutzer übergeben, der anschließend die Transform-Methode aufruft und die Transformation ausführt.

Diese Sicherheitsrisiken können abgeschwächt werden, indem keine XslTransform-Objekte, XSLT-Stylesheets und XML-Quelldaten von nicht vertrauenswürdigen Quellen angenommen werden.

Skriptunterstützung

Diese Klasse unterstützt eingebettete Skripts unter Verwendung des msxsl:script-Elements.

In .NET Framework, Version 1.1, bestimmt der Beweis des Stylesheets die Berechtigungen, die eingebetteten Skripts erteilt werden.

  • Wenn das Stylesheet aus einem URI (Uniform Resource Identifier) geladen wurde, wird der URI zum Erstellen des Beweises verwendet. Dieser Beweis umfasst den URI sowie die zugehörige Site und Zone.

  • Wenn das Stylesheet aus einer anderen Quelle geladen wurde, können Sie einen Beweis bereitstellen, indem Sie ein System.Security.Policy.Evidence-Objekt an die Load-Methode übergeben. Andernfalls wird die Skriptassembly als vollständig vertrauenswürdig behandelt.

Teilweise vertrauenswürdige Aufrufer: Zum Kompilieren des eingebetteten Skripts ist die UnmanagedCode-Berechtigung erforderlich. Die ControlEvidence-Berechtigung ist erforderlich, um Evidence für die Load-Methode bereitzustellen. Wenn der Aufrufer nicht über die notwendigen Berechtigungen verfügt, wird eine SecurityException ausgelöst. Weitere Informationen finden Sie unter System.Security.Permissions.SecurityPermission und System.Security.Permissions.SecurityPermissionFlag.

Für das msxsl:script-Element müssen die folgenden Anforderungen erfüllt sein:

  • Das msxsl:script-Element gehört zum urn:schemas-microsoft-com:xslt-Namespace. Das Stylesheet muss die xmlns:msxsl=urn:schemas-microsoft-com:xslt-Namespacedeklaration enthalten.

  • Das msxsl:script-Element kann ein language-Attribut enthalten, das die zu verwendende Skriptsprache angibt. Der Wert des language-Attributs muss einer der folgenden Werte sein: C#, CSharp, VB, VisualBasic, JScript oder JavaScript. Da beim Namen der Sprache Groß- und Kleinschreibung nicht berücksichtigt wird, ist sowohl JavaScript als auch javascript gültig. Wenn kein language-Attribut angegeben ist, wird als Standard JScript verwendet.

  • Das msxsl:script-Element muss ein implements-prefix-Attribut mit dem Präfix enthalten, das den dem Skriptblock zugeordneten Namespace darstellt. Dieser Namespace muss innerhalb des Stylesheets definiert werden. Ein Stylesheet kann mehrere Skriptblöcke enthalten, die nach Namespaces gruppiert werden. Skriptblöcke mit mehreren Sprachen können nicht innerhalb eines Namespaces auftreten. Skriptblöcke können eine Funktion aufrufen, die in einem anderen Skriptblock definiert ist, wenn sich die Skriptblöcke im gleichen Namespace befinden. Der Inhalt eines Skriptblockes wird gemäß den Regeln und der Syntax der Skriptsprache analysiert (bereitgestellt durch das language-Attribut). Bei einem C#-Skriptblock erhalten Kommentare z. B. die Zeichen // als Präfix. Die Kommentare müssen einen gültigen XML-Inhalt darstellen.

Note Es wird empfohlen, Skriptblöcke in einen CDATA-Abschnitt einzubetten.

 <msxsl:script implements-prefix='xy' language='C#'>
   <![CDATA[
   // Add code here.
   ]]>
 </msxsl:script>

Funktionen können im msxsl:script-Element deklariert werden. In der folgenden Tabelle werden die Namespaces angezeigt, die standardmäßig unterstützt werden.

Unterstützte Namespaces

Beschreibung

System

Systemklassen.

System.Collection

Auflistungsklassen.

System.Text

Textbehandlungsklassen.

System.Xml

Kern-XML-Klassen.

System.Xml.Xsl

XSLT-Klassen.

System.Xml.XPath

XPath (XML Path Language)-Klassen.

Die bereitgestellten, durch die Skriptfunktionen definierten Argumente und Rückgabewerte müssen einen der nachfolgend aufgeführten W3C (World Wide Web Consortium)-Typen aufweisen. In der folgenden Tabelle wird die Zuordnung zwischen den W3C-Typen (XPath oder XSLT) und den entsprechenden .NET Framework-Klassen dargestellt.

W3C-Typ

Entsprechende .NET-Klasse

Zeichenfolge (XPath)

System.String

Boolescher Wert (XPath)

System.Boolean

Zahl (XPath)

System.Double

Ergebnisstrukturfragment (XSLT)

System.Xml.XPath.XPathNavigator

Knotensatz (XPath)

System.Xml.XPath.XPathNodeIterator

Wenn die Skriptfunktion einen der numerischen Typen Int16, UInt16, Int32, UInt32, Int64, UInt64, Single oder Decimal verwendet, werden diese Typen in Double umgewandelt, wodurch eine Zuordnung zur XPath-Typnummer des W3C erfolgt.

Eine Ausnahme wird ausgelöst, wenn eine Funktion aufgerufen wird, die das Ergebnis des Arguments nicht in einen der erforderlichen Typen konvertieren kann.

Hinweis

msxsl:script und msxsl:node-list sind die einzigen Funktionen aus dem urn:schemas-microsoft-com:xslt-Namespace, die von der XslTransform-Klasse unterstützt werden.

XslTransform kann CLR (Common Language Runtime)-Code als Erweiterungsmechanismus verwenden. Dies geschieht durch das Übergeben einer Instanz einer Klasse an die XslTransform-Klasse und das Aufrufen ihrer öffentlichen Methoden in einem XSLT-Stylesheet. Methoden, die durch das params-Schlüsselwort definiert sind, durch das eine nicht festgelegte Anzahl von Parametern übergeben werden kann, funktionieren in diesem Szenario nicht ordnungsgemäß. Weitere Informationen finden Sie unter params (C#-Referenz).

Weitere Informationen finden Sie unter XSLT-Transformationen mit der XslTransform-Klasse.

Thema Position
Gewusst wie: Umwandeln von XML-Daten im XML-Webserversteuerelement Erstellen von ASP.NET-Webanwendungen in Visual Studio
Gewusst wie: Umwandeln von XML-Daten im XML-Webserversteuerelement Erstellen von ASP.NET-Webanwendungen in Visual Studio
Gewusst wie: Umwandeln von XML-Daten im XML-Webserversteuerelement Erstellen von ASP.NET-Webanwendungen

Beispiel

Im folgenden Beispiel wird das angegebene XML-Dokument transformiert und das Ergebnis auf der Konsole ausgegeben.

'Create a new XslTransform object.
Dim xslt As New XslTransform()

'Load the stylesheet.
xslt.Load(CType("https://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("https://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( "https://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("https://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);

Vererbungshierarchie

System.Object
  System.Xml.Xsl.XslTransform

Threadsicherheit

XslTransform-Objekte sind nur für Transformationsvorgänge threadsicher. Bei anderen Vorgängen ist die Threadsicherheit nicht sichergestellt. Sie müssen sicherstellen, dass keine anderen Methoden während des Ladevorgangs für das Objekt aufgerufen werden.

Plattformen

Windows 98, Windows 2000 SP4, Windows Millennium Edition, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition

.NET Framework unterstützt nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen.

Versionsinformationen

.NET Framework

Unterstützt in: 1.0, 1.1
Veraltet (Compilerwarnung) in 2.0

Siehe auch

Referenz

XslTransform-Member
System.Xml.Xsl-Namespace