Freigeben über


Migrieren von der XslTransform-Klasse

Die XSLT-Architektur wurde in der Visual Studio 2005-Version neu gestaltet. Die XslTransform Klasse wurde durch die XslCompiledTransform Klasse ersetzt.

In den folgenden Abschnitten werden einige der Hauptunterschiede zwischen den XslCompiledTransform Klassen und den XslTransform Klassen beschrieben.

Leistung

Die XslCompiledTransform Klasse enthält viele Leistungsverbesserungen. Der neue XSLT-Prozessor kompiliert das XSLT-Stylesheet auf ein gängiges Zwischenformat, ähnlich wie die Common Language Runtime (CLR) für andere Programmiersprachen. Nachdem das Stylesheet kompiliert wurde, kann es zwischengespeichert und wiederverwendet werden.

Die XslCompiledTransform Klasse enthält auch andere Optimierungen, die es viel schneller machen als die XslTransform Klasse.

Hinweis

Obwohl die Gesamtleistung der XslCompiledTransform Klasse besser ist als die XslTransform Klasse, kann die Load Methode der XslCompiledTransform Klasse langsamer als die Load Methode der XslTransform Klasse ausgeführt werden, wenn sie zum ersten Mal für eine Transformation aufgerufen wird. Dies liegt daran, dass die XSLT-Datei vor dem Laden kompiliert werden muss. Weitere Informationen finden Sie im folgenden Blogbeitrag: XslCompiledTransform Langsamer als XslTransform?

Sicherheit

Standardmäßig deaktiviert die Klasse die XslCompiledTransform Unterstützung für die XSLT-Funktion document() und das eingebettete Skripting. Diese Features können aktiviert werden, indem ein XsltSettings Objekt mit aktivierten Features erstellt und an die Load Methode übergeben wird. Das folgende Beispiel zeigt, wie Skripting aktiviert und eine XSLT-Transformation ausgeführt wird.

Hinweis

Skriptblöcke werden nur in .NET Framework unterstützt. Sie werden auf .NET Core oder .NET 5 oder höher nicht unterstützt.

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

Weitere Informationen finden Sie unter XSLT-Sicherheitsüberlegungen.

Neue Funktionen

Temporäre Dateien

Temporäre Dateien werden manchmal während der XSLT-Verarbeitung generiert. Wenn ein Stylesheet Skriptblöcke enthält oder wenn es mit der auf "true" festgelegten Debugeinstellung kompiliert wird, können temporäre Dateien im ordner %TEMP% erstellt werden. Es kann vorkommen, dass einige temporäre Dateien aufgrund von Timing-Problemen nicht gelöscht werden. Wenn die Dateien z. B. von der aktuellen AppDomain oder vom Debugger verwendet werden, kann der Finalizer des TempFileCollection Objekts sie nicht entfernen.

Die TemporaryFiles Eigenschaft kann für zusätzliche Bereinigungen verwendet werden, um sicherzustellen, dass alle temporären Dateien vom Client entfernt werden.

Unterstützung für das "xsl:output"-Element und "XmlWriter"

Die XslTransform Klasse ignorierte xsl:output Einstellungen, wenn die Transformationsausgabe an ein XmlWriter Objekt gesendet wurde. Die XslCompiledTransform-Klasse verfügt über eine OutputSettings-Eigenschaft, die ein XmlWriterSettings-Objekt zurückgibt, das die Ausgabeinformationen enthält, die aus dem xsl:output-Element des Stylesheets abgeleitet sind. Das XmlWriterSettings Objekt wird verwendet, um ein XmlWriter Objekt mit den richtigen Einstellungen zu erstellen, die an die Transform Methode übergeben werden können. Der folgende C#-Code veranschaulicht dieses Verhalten:

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

Debugoption

Die XslCompiledTransform Klasse kann Debuginformationen generieren, mit denen Sie das Stylesheet mit dem Microsoft Visual Studio-Debugger debuggen können. Weitere Informationen finden Sie unter XslCompiledTransform(Boolean).

Verhaltensunterschiede

Transformieren in einen XmlReader

Die XslTransform Klasse verfügt über mehrere Transformationsüberladungen, die Transformationsergebnisse als XmlReader Objekt zurückgeben. Diese Überladungen können verwendet werden, um die Transformationsergebnisse in eine Darstellung im Arbeitsspeicher zu laden (z. B. XmlDocument oder XPathDocument), ohne dass dabei unnötig viele Ressourcen für die Serialisierung und Deserialisierung der resultierenden XML-Struktur verbraucht werden. Der folgende C#-Code zeigt, wie die Transformationsergebnisse in ein XmlDocument Objekt geladen werden.

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

Die XslCompiledTransform Klasse unterstützt keine Transformation in ein XmlReader Objekt. Sie können jedoch etwas Ähnliches tun, indem Sie mit der CreateNavigator-Methode die resultierende XML-Struktur direkt aus einer XmlWriter laden. Im folgenden C#-Code wird gezeigt, wie Sie die gleiche Aufgabe mit XslCompiledTransform erledigen können:

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

Diskretionäres Verhalten

Die W3C XSL-Transformationen (XSLT) Version 1.0-Empfehlung enthält Bereiche, in denen der Implementierungsanbieter entscheiden kann, wie eine Situation behandelt werden soll. Diese Bereiche gelten als diskretionäres Verhalten. Es gibt mehrere Bereiche, in denen sich das XslCompiledTransform Verhalten anders verhält als die XslTransform Klasse. Weitere Informationen finden Sie unter "Wiederherstellbare XSLT-Fehler".

Erweiterungsobjekte und Skriptfunktionen

XslCompiledTransform führt zwei neue Einschränkungen für die Verwendung von Skriptfunktionen ein:

  • Nur öffentliche Methoden können aus XPath-Ausdrücken aufgerufen werden.

  • Überladungen können anhand der Anzahl der Argumente voneinander unterschieden werden. Wenn mehrere Überladungen über die gleiche Anzahl von Argumenten verfügen, wird eine Ausnahme ausgelöst.

In XslCompiledTransform erfolgt beim Kompilieren eine Bindung (Methodennamensuche) an Skriptfunktionen, und Stylesheets, die zusammen mit XslTranform funktioniert haben, können eine Ausnahme auslösen, wenn sie zusammen mit XslCompiledTransform geladen werden.

XslCompiledTransform unterstützt das Vorhandensein von msxsl:using und msxsl:assembly untergeordneten Elementen innerhalb des msxsl:script Elements. Die Elemente msxsl:using und msxsl:assembly werden verwendet, um zusätzliche Namespaces und Assemblys für die Verwendung im Skriptblock zu deklarieren. Weitere Informationen finden Sie unter Script Blocks Using msxsl:script .

XslCompiledTransform verbietet Erweiterungsobjekte mit mehreren Überladungen mit derselben Anzahl von Argumenten.

MSXML-Funktionen

Unterstützung für zusätzliche MSXML-Funktionen wurde der XslCompiledTransform Klasse hinzugefügt. In der folgenden Liste werden neue oder verbesserte Funktionen beschrieben:

Siehe auch