Delen via


Migreren vanuit de XslTransform-klasse

De XSLT-architectuur is opnieuw ontworpen in de Visual Studio 2005-release. De XslTransform klasse is vervangen door de XslCompiledTransform klasse.

In de volgende secties worden enkele van de belangrijkste verschillen tussen de XslCompiledTransform en de XslTransform klassen beschreven.

Prestaties

De XslCompiledTransform klasse bevat veel prestatieverbeteringen. De nieuwe XSLT-processor compileert het XSLT-opmaakmodel naar een gemeenschappelijke tussenliggende indeling, vergelijkbaar met wat de Common Language Runtime (CLR) doet voor andere programmeertalen. Zodra het opmaakmodel is gecompileerd, kan het in de cache worden opgeslagen en opnieuw worden gebruikt.

De XslCompiledTransform klasse bevat ook andere optimalisaties die het veel sneller maken dan de XslTransform klasse.

Notitie

Hoewel de algehele prestaties van de XslCompiledTransform klasse beter zijn dan de XslTransform klasse, kan de Load methode van de XslCompiledTransform klasse langzamer presteren dan de Load methode van de XslTransform klasse wanneer deze voor het eerst wordt aangeroepen voor een transformatie. Dit komt doordat het XSLT-bestand moet worden gecompileerd voordat het wordt geladen. Zie de volgende blogpost voor meer informatie: XslCompiledTransform Slower dan XslTransform?

Beveiliging

XslCompiledTransform De klasse schakelt standaard ondersteuning voor de XSLT-functie document() en ingesloten scripts uit. Deze functies kunnen worden ingeschakeld door een XsltSettings object te maken waarvoor de functies zijn ingeschakeld en door te geven aan de Load methode. In het volgende voorbeeld ziet u hoe u scripting inschakelt en een XSLT-transformatie uitvoert.

Notitie

Scriptblokken worden alleen ondersteund in .NET Framework. Ze worden niet ondersteund op .NET Core of .NET 5 of hoger.

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

Zie XSLT-beveiligingsoverwegingen voor meer informatie.

Nieuwe functies

Tijdelijke bestanden

Tijdelijke bestanden worden soms gegenereerd tijdens XSLT-verwerking. Als een opmaakmodel scriptblokken bevat of als het is gecompileerd met de instelling voor foutopsporing ingesteld op waar, kunnen tijdelijke bestanden worden gemaakt in de map %TEMP%. Er kunnen exemplaren zijn wanneer sommige tijdelijke bestanden niet worden verwijderd vanwege timingproblemen. Als de bestanden bijvoorbeeld worden gebruikt door het huidige AppDomain of door het foutopsporingsprogramma, kunnen ze niet worden verwijderd door de finalizer van het TempFileCollection object.

De TemporaryFiles eigenschap kan worden gebruikt voor extra opschoning om ervoor te zorgen dat alle tijdelijke bestanden van de client worden verwijderd.

Ondersteuning voor het element xsl:output en XmlWriter

De XslTransform klasse negeerde xsl:output instellingen toen de transformatie-uitvoer naar een XmlWriter object werd verzonden. De XslCompiledTransform klasse heeft een OutputSettings eigenschap die een XmlWriterSettings object retourneert dat de uitvoerinformatie bevat die is afgeleid van het xsl:output element van het opmaakmodel. Het XmlWriterSettings object wordt gebruikt om een XmlWriter object te maken met de juiste instellingen die aan de Transform methode kunnen worden doorgegeven. De volgende C#-code illustreert dit gedrag:

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

Optie voor foutopsporing

De XslCompiledTransform klasse kan foutopsporingsgegevens genereren, waarmee u fouten in het opmaakmodel kunt opsporen met het Foutopsporingsprogramma van Microsoft Visual Studio. Zie XslCompiledTransform(Boolean) voor meer informatie.

Gedragsverschillen

Transformeren naar een XmlReader

De XslTransform klasse heeft verschillende transformatieoverbelastingen die transformatieresultaten retourneren als een XmlReader object. Deze overbelastingen kunnen worden gebruikt om de transformatieresultaten te laden in een in-memory weergave (zoals XmlDocument of XPathDocument) zonder dat de overhead van serialisatie en deserialisatie van de resulterende XML-structuur wordt veroorzaakt. De volgende C#-code laat zien hoe u de transformatieresultaten in een XmlDocument object laadt.

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

De XslCompiledTransform klasse biedt geen ondersteuning voor transformatie naar een XmlReader object. U kunt echter iets soortgelijks doen met behulp van de CreateNavigator methode om de resulterende XML-structuur rechtstreeks vanuit een XmlWriter. De volgende C#-code laat zien hoe u dezelfde taak kunt uitvoeren met behulp van 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);
}

Discretionair gedrag

De aanbeveling W3C XSL Transformations (XSLT) versie 1.0 bevat gebieden waarin de implementatieprovider kan bepalen hoe een situatie moet worden afgehandeld. Deze gebieden worden beschouwd als discretionair gedrag. Er zijn verschillende gebieden waar het XslCompiledTransform gedrag anders werkt dan de XslTransform klasse. Zie Herstelbare XSLT-fouten voor meer informatie.

Extensieobjecten en scriptfuncties

XslCompiledTransform introduceert twee nieuwe beperkingen voor het gebruik van scriptfuncties:

  • Alleen openbare methoden kunnen worden aangeroepen vanuit XPath-expressies.

  • Overbelastingen kunnen van elkaar worden onderscheiden op basis van het aantal argumenten. Als meer dan één overbelasting hetzelfde aantal argumenten heeft, wordt er een uitzondering gegenereerd.

In XslCompiledTransform, een binding (methode naam opzoeken) voor scriptfuncties vindt plaats tijdens het compileren en opmaakmodellen die met XslTransform werkten, kan een uitzondering veroorzaken wanneer ze worden geladen met XslCompiledTransform.

XslCompiledTransform ondersteunt het hebben msxsl:using van onderliggende elementen msxsl:assembly binnen het msxsl:script element. De msxsl:using en msxsl:assembly elementen worden gebruikt om extra naamruimten en assembly's te declareren voor gebruik in het scriptblok. Zie Scriptblokken met msxsl:script voor meer informatie.

XslCompiledTransform verbiedt uitbreidingsobjecten met meerdere overbelastingen met hetzelfde aantal argumenten.

MSXML-functies

Ondersteuning voor extra MSXML-functies is toegevoegd aan de XslCompiledTransform klasse. In de volgende lijst wordt de nieuwe of verbeterde functionaliteit beschreven:

Zie ook