Dela via


Migrera från XslTransform-klassen

XSLT-arkitekturen har gjorts om i Visual Studio 2005-versionen. Klassen XslTransform ersattes av XslCompiledTransform klassen.

I följande avsnitt beskrivs några av de största skillnaderna mellan klasserna XslCompiledTransformXslTransform och .

Prestanda

Klassen XslCompiledTransform innehåller många prestandaförbättringar. Den nya XSLT-processorn kompilerar XSLT-formatmallen till ett gemensamt mellanliggande format, ungefär som den vanliga språkkörningen (CLR) gör för andra programmeringsspråk. När formatmallen har kompilerats kan den cachelagras och återanvändas.

Klassen XslCompiledTransform innehåller även andra optimeringar som gör den mycket snabbare än XslTransform klassen.

Kommentar

Även om klassens övergripande prestanda XslCompiledTransform är bättre än XslTransform klassen kan Load metoden för XslCompiledTransform klassen utföras långsammare än Load metoden för XslTransform klassen första gången den anropas för en transformering. Det beror på att XSLT-filen måste kompileras innan den läses in. Mer information finns i följande blogginlägg: XslCompiledTransform Långsammare än XslTransform?

Säkerhet

Som standard XslCompiledTransform inaktiverar klassen stöd för XSLT-funktionen document() och inbäddade skript. Dessa funktioner kan aktiveras genom att skapa ett XsltSettings objekt som har funktionerna aktiverade och skicka dem till Load metoden. I följande exempel visas hur du aktiverar skript och utför en XSLT-transformering.

Kommentar

Skriptblock stöds endast i .NET Framework. De stöds inte på .NET Core eller .NET 5 eller senare.

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

Mer information finns i XSLT-säkerhetsöverväganden.

Nya funktioner

Temporära filer

Tillfälliga filer genereras ibland under XSLT-bearbetning. Om en formatmall innehåller skriptblock, eller om den kompileras med felsökningsinställningen inställd på true, kan temporära filer skapas i mappen %TEMP%. Det kan finnas instanser när vissa temporära filer inte tas bort på grund av tidsproblem. Om filerna till exempel används av den aktuella AppDomain eller av felsökningsprogrammet kan inte objektets slutförare TempFileCollection ta bort dem.

Egenskapen TemporaryFiles kan användas för ytterligare rensning för att se till att alla temporära filer tas bort från klienten.

Stöd för xsl:output-elementet och XmlWriter

Klassen XslTransform ignorerade xsl:output inställningarna när transformeringsutdata skickades till ett XmlWriter objekt. Klassen XslCompiledTransform har en OutputSettings egenskap som returnerar ett XmlWriterSettings objekt som innehåller utdatainformationen som härleds från elementet xsl:output i formatmallen. Objektet XmlWriterSettings används för att skapa ett XmlWriter objekt med rätt inställningar som kan skickas till Transform metoden. Följande C#-kod illustrerar det här beteendet:

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

Felsökningsalternativ

Klassen XslCompiledTransform kan generera felsökningsinformation, vilket gör att du kan felsöka formatmallen med Microsoft Visual Studio-felsökningsprogrammet. Mer information finns i XslCompiledTransform(Boolean).

Beteendeskillnader

Transformera till en XmlReader

Klassen XslTransform har flera transformöverlagringar som returnerar transformeringsresultat som ett XmlReader objekt. Dessa överlagringar kan användas för att läsa in transformeringsresultatet till en minnesintern representation (till exempel XmlDocument eller XPathDocument) utan att medföra omkostnaderna för serialisering och deserialisering av det resulterande XML-trädet. Följande C#-kod visar hur du läser in transformeringsresultatet till ett XmlDocument objekt.

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

Klassen XslCompiledTransform stöder inte transformering till ett XmlReader objekt. Du kan dock göra något liknande genom att använda CreateNavigator metoden för att läsa in det resulterande XML-trädet direkt från en XmlWriter. Följande C#-kod visar hur du utför samma uppgift med hjälp av 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);
}

Diskretionärt beteende

Rekommendationen W3C XSL Transformations (XSLT) version 1.0 innehåller områden där implementeringsprovidern kan bestämma hur en situation ska hanteras. Dessa områden anses vara diskretionärt beteende. Det finns flera områden där XslCompiledTransform beter sig annorlunda än XslTransform klassen. Mer information finns i Återställningsbara XSLT-fel.

Tilläggsobjekt och skriptfunktioner

XslCompiledTransform introducerar två nya begränsningar för användningen av skriptfunktioner:

  • Endast offentliga metoder kan anropas från XPath-uttryck.

  • Överlagringar kan skiljas från varandra baserat på antalet argument. Om fler än en överlagring har samma antal argument genereras ett undantag.

I XslCompiledTransforminträffar en bindning (metodnamnsökning) till skriptfunktioner vid kompileringstid, och formatmallar som fungerade med XslTransform kan orsaka ett undantag när de läses in med XslCompiledTransform.

XslCompiledTransform har stöd för att ha msxsl:using och msxsl:assembly underordnade element i elementet msxsl:script . Elementen msxsl:using och msxsl:assembly används för att deklarera ytterligare namnområden och sammansättningar för användning i skriptblocket. Mer information finns i Skriptblock med hjälp av msxsl:script .

XslCompiledTransform förbjuder tilläggsobjekt som har flera överlagringar med samma antal argument.

MSXML-funktioner

Stöd för ytterligare MSXML-funktioner har lagts till i XslCompiledTransform klassen. I följande lista beskrivs nya eller förbättrade funktioner:

Se även