Migrieren von der XslTransform-KlasseMigrating From the XslTransform Class

Die Version Visual Studio 2005 wartet mit einer umgestalteten XSLT-Architektur auf.The XSLT architecture was redesigned in the Visual Studio 2005 release. Die XslTransform-Klasse wurde durch die XslCompiledTransform-Klasse ersetzt.The XslTransform class was replaced by the XslCompiledTransform class.

In den folgenden Abschnitten werden einige der Hauptunterschiede zwischen der XslCompiledTransform-Klasse und der XslTransform-Klasse beschrieben.The following sections describe some of the main differences between the XslCompiledTransform and the XslTransform classes.

LeistungPerformance

Die XslCompiledTransform-Klasse weist eine Reihe von Leistungsverbesserungen auf.The XslCompiledTransform class includes many performance improvements. Der neue XSLT-Prozessor kompiliert das XSLT-Stylesheet in ein allgemeines Zwischenformat, ähnlich wie dies von der CLR (Common Language Runtime) für andere Programmiersprachen erfolgt.The new XSLT processor compiles the XSLT style sheet down to a common intermediate format, similar to what the common language runtime (CLR) does for other programming languages. Sobald das Stylesheet kompiliert ist, kann es zwischengespeichert und wiederverwendet werden.Once the style sheet is compiled, it can be cached and reused.

Die XslCompiledTransform-Klasse enthält zudem weitere Optimierungen, wodurch sie viel schneller als die XslTransform-Klasse ist.The XslCompiledTransform class also includes other optimizations that make it much faster than the XslTransform class.

Hinweis

Obwohl die Gesamtleistung der XslCompiledTransform-Klasse besser ist als die der XslTransform-Klasse, ist die Leistung der Load-Methode der XslCompiledTransform-Klasse möglicherweise langsamer als die Load-Methode der XslTransform-Klasse, wenn sie zum ersten Mal für eine Transformation aufgerufen wird.Although the overall performance of the XslCompiledTransform class is better than the XslTransform class, the Load method of the XslCompiledTransform class might perform more slowly than the Load method of the XslTransform class the first time it is called on a transformation. Dies liegt daran, dass die XSLT-Datei zunächst kompiliert werden muss, bevor sie geladen wird.This is because the XSLT file must be compiled before it is loaded. Weitere Informationen finden Sie im folgenden Blogbeitrag: XslCompiledTransform Slower than XslTransform? (Ist XslCompiledTransform langsamer als XslTransform?)For more information, see the following blog post: XslCompiledTransform Slower than XslTransform?

SicherheitSecurity

Die XslCompiledTransform-Klasse deaktiviert standardmäßig die Unterstützung für die XSLT-Funktion document() und die Erstellung eingebetteter Skripts.By default, the XslCompiledTransform class disables support for the XSLT document() function and embedded scripting. Diese Funktionen können durch Erstellen eines XsltSettings-Objekts aktiviert werden, in dem diese Funktionen aktiviert sind und das an die Load-Methode übergeben wird.These features can be enabled by creating an XsltSettings object that has the features enabled and passing it to the Load method. Das folgende Beispiel zeigt, wie Sie Skripts aktivieren und eine XSLT-Transformation durchführen können.The following example shows how to enable scripting and perform an XSLT transformation.

// 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-Sicherheitsaspekte.For more information, see XSLT Security Considerations.

Neue FunktionenNew Features

Temporäre DateienTemporary Files

Bei der XSLT-Verarbeitung werden mitunter temporäre Dateien angelegt.Temporary files are sometimes generated during XSLT processing. Diese temporären Dateien werden z. B. dann erstellt und im Ordner <legacyBold>%TEMP%</legacyBold> abgelegt, wenn ein Stylesheet Skriptblöcke enthält oder beim Kompilieren die Debugeinstellung auf <legacyBold>true</legacyBold> gesetzt ist.If a style sheet contains script blocks, or if it is compiled with the debug setting set to true, temporary files may be created in the %TEMP% folder. Es kann vorkommen, dass diese temporären Dateien aufgrund von Timingproblemen nicht wieder gelöscht werden.There may be instances when some temporary files are not deleted due to timing issues. Dies ist z. B. der Fall, wenn die Dateien von der aktuellen AppDomain oder vom Debugger verwendet werden. Die <legacyBold>Finalize</legacyBold>-Methode des TempFileCollection-Objekts ist dann nicht in der Lage, die temporären Dateien zu entfernen.For example, if the files are in use by the current AppDomain or by the debugger, the finalizer of the TempFileCollection object will not be able to remove them.

Um sicherzustellen, dass alle temporären Dateien vom Client entfernt werden, können Sie die TemporaryFiles-Methode einsetzen, um den Ordner %TEMP% entsprechend aufzuräumen.The TemporaryFiles property can be used for additional cleanup to make sure that all temporary files are removed from the client.

Unterstützung für das "xsl:output"-Element und "XmlWriter"Support for the xsl:output Element and XmlWriter

Die XslTransform-Klasse hat xsl:output-Einstellungen ignoriert, wenn die Transformierenausgabe an ein XmlWriter-Objekt gesendet wurde.The XslTransform class ignored xsl:output settings when the transform output was sent to an XmlWriter object. Die XslCompiledTransform-Klasse verfügt über die OutputSettings-Eigenschaft, die ein XmlWriterSettings-Objekt mit den Ausgabeinformationen enthält, die aus dem xsl:output-Element des Stylesheets abgeleitet wurden.The XslCompiledTransform class has an OutputSettings property that returns an XmlWriterSettings object containing the output information derived from the xsl:output element of the style sheet. Das XmlWriterSettings-Objekt wird zur Erstellung eines XmlWriter-Objekts verwendet, das mit den korrekten Einstellungen versehen ist und an die Transform-Methode übergeben werden kann.The XmlWriterSettings object is used to create an XmlWriter object with the correct settings that can be passed to the Transform method. Der folgende C#-Code veranschaulicht dieses Verhalten:The following C# code illustrates this behavior:

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

DebugoptionDebug Option

Die XslCompiledTransform-Klasse kann Debuginformationen generieren, mit denen Sie unter Verwendung des Microsoft Visual Studio-Debuggers Fehler im Stylesheet beheben können.The XslCompiledTransform class can generate debug information, which enables you to debug the style sheet with the Microsoft Visual Studio Debugger. Weitere Informationen finden Sie unter XslCompiledTransform(Boolean).See XslCompiledTransform(Boolean) for more information.

VerhaltensunterschiedeBehavioral Differences

Transformation in einen „XmlReader“Transforming to an XmlReader

Die XslTransform-Klasse verfügt über mehrere Transformierenüberladungen, die Transformationsergebnisse in Form eines XmlReader-Objekts zurückgeben.The XslTransform class has several Transform overloads that return transformation results as an XmlReader object. 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.These overloads can be used to load the transformation results into an in-memory representation (such as XmlDocument or XPathDocument) without incurring the overhead of serialization and deserialization of the resulting XML tree. Im folgenden C#-Code wird gezeigt, wie die Transformationsergebnisse in ein XmlDocument-Objekt geladen werden:The following C# code shows how to load the transformation results into an XmlDocument object.

// 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 bietet keine Unterstützung für das Transformieren in ein XmlReader-Objekt.The XslCompiledTransform class does not support transforming to an XmlReader object. Einen ähnlichen Effekt erreichen Sie aber, indem Sie die CreateNavigator-Methode verwenden, um die resultierende XML-Struktur direkt aus einem XmlWriter zu laden.However, you can do something similar by using the CreateNavigator method to load the resulting XML tree directly from an XmlWriter. Im folgenden C#-Code wird gezeigt, wie Sie die gleiche Aufgabe mit XslCompiledTransform erledigen können:The following C# code shows how to accomplish the same task using 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);
}

Freigegebene VerhaltensweisenDiscretionary Behavior

Im W3C-Dokument „XSL Transformations (XSLT) Version 1.0“ gibt es bestimmte Bereiche, bei denen es dem Anbieter der Implementierung freigestellt ist, wie er mit der jeweiligen Situation umgeht.The W3C XSL Transformations (XSLT) Version 1.0 Recommendation includes areas in which the implementation provider may decide how to handle a situation. Diese Bereiche werden als "freigegebene Verhaltensweisen" bezeichnet.These areas are considered to be discretionary behavior. Es gibt mehrere Bereiche, in denen sich die XslCompiledTransform-Klasse anders verhält als die XslTransform-Klasse.There are several areas where the XslCompiledTransform behaves differently than the XslTransform class. Weitere Informationen finden Sie unter Behebbare XSLT-Fehler.For more information, see Recoverable XSLT Errors.

Erweiterungsobjekte und SkriptfunktionenExtension Objects and Script Functions

XslCompiledTransform führt zwei neue Beschränkungen für die Verwendung von Skriptfunktionen ein:XslCompiledTransform introduces two new restrictions on the use of script functions:

  • Von XPath-Ausdrücken aus dürfen nur öffentliche Methoden aufgerufen werden.Only public methods may be called from XPath expressions.

  • Überladungen können anhand der Anzahl der Argumente voneinander unterschieden werden.Overloads are distinguishable from each other based on the number of arguments. Wenn mehrere Überladungen über die gleiche Anzahl von Argumenten verfügen, wird eine Ausnahme ausgelöst.If more than one overload has the same number of arguments, an exception will be raised.

In XslCompiledTransform erfolgt beim Kompilieren eine Bindung (Methodennamensuche) an Skriptfunktionen, und Stylesheets, die zusammen mit <legacyBold>XslTranform</legacyBold> funktioniert haben, können eine Ausnahme auslösen, wenn sie zusammen mit XslCompiledTransform geladen werden.In XslCompiledTransform, a binding (method name lookup) to script functions occurs at compile time, and style sheets that worked with XslTransform may cause an exception when they are loaded with XslCompiledTransform.

XslCompiledTransform unterstützt die Verwendung von untergeordneten msxsl:using- und msxsl:assembly-Elementen innerhalb des msxsl:script-Elements.XslCompiledTransform supports having msxsl:using and msxsl:assembly child elements within the msxsl:script element. Die Elemente msxsl:using und msxsl:assembly werden verwendet, um zusätzliche Namespaces und Assemblys für die Verwendung im Skriptblock zu deklarieren.The msxsl:using and msxsl:assembly elements are used to declare additional namespaces and assemblies for use in the script block. Weitere Informationen finden Sie unter Skriptblöcke, die „msxsl:script“ verwenden.See Script Blocks Using msxsl:script for more information.

XslCompiledTransform verhindert Erweiterungsobjekte, die über mehrere Überladungen mit derselben Anzahl von Argumenten verfügen.XslCompiledTransform prohibits extension objects that have multiple overloads with the same number of arguments.

MSXML-FunktionenMSXML Functions

Die XslCompiledTransform-Klasse wurde um die Unterstützung für zusätzliche MSXML-Funktionen erweitert.Support for additional MSXML functions have been added to the XslCompiledTransform class. In der folgenden Liste werden die neuen oder verbesserten Funktionen aufgeführt:The following list describes new or improved functionality:

Siehe auchSee also