Condividi tramite


Migrazione dalla classe XslTransform

L'architettura XSLT è stata riprogettata nella versione di Visual Studio 2005. La XslTransform classe è stata sostituita dalla XslCompiledTransform classe .

Le sezioni seguenti descrivono alcune delle principali differenze tra le XslCompiledTransform classi e XslTransform .

Prestazioni

La XslCompiledTransform classe include molti miglioramenti delle prestazioni. Il nuovo processore XSLT compila il foglio di stile XSLT in un formato intermedio comune, simile a quello che fa Common Language Runtime (CLR) per altri linguaggi di programmazione. Una volta compilato il foglio di stile, può essere memorizzato nella cache e riutilizzato.

La XslCompiledTransform classe include anche altre ottimizzazioni che lo rendono molto più veloce della XslTransform classe .

Annotazioni

Anche se le prestazioni complessive della XslCompiledTransform classe sono migliori rispetto alla XslTransform classe , il Load metodo della XslCompiledTransform classe potrebbe eseguire più lentamente rispetto al Load metodo della XslTransform classe la prima volta che viene chiamato in una trasformazione. Questo perché il file XSLT deve essere compilato prima del caricamento. Per altre informazioni, vedere il post di blog seguente: XslCompiledTransform Slower than XslTransform?

Sicurezza

Per impostazione predefinita, la classe disabilita il supporto per la funzione XSLT XslCompiledTransform e lo scripting incorporato document(). Queste funzionalità possono essere abilitate creando un XsltSettings oggetto con le funzionalità abilitate e passandolo al Load metodo . Nell'esempio seguente viene illustrato come abilitare lo scripting ed eseguire una trasformazione XSLT.

Annotazioni

I blocchi di script sono supportati solo in .NET Framework. Non sono supportati in .NET Core o .NET 5 o versioni successive.

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

Per altre informazioni, vedere Considerazioni sulla sicurezza XSLT.

Nuove funzionalità

File temporanei

I file temporanei vengono talvolta generati durante l'elaborazione XSLT. Se un foglio di stile contiene blocchi di script o se viene compilato con l'impostazione di debug impostato su true, è possibile creare file temporanei nella cartella %TEMP%. Potrebbero essere presenti istanze in cui alcuni file temporanei non vengono eliminati a causa di problemi di temporizzazione. Ad esempio, se i file sono in uso dall'AppDomain corrente o dal debugger, il finalizzatore dell'oggetto TempFileCollection non sarà in grado di rimuoverli.

La TemporaryFiles proprietà può essere utilizzata per una pulizia aggiuntiva per assicurarsi che tutti i file temporanei vengano rimossi dal client.

Supporto per l'elemento xsl:output e XmlWriter

La classe XslTransform ha ignorato le impostazioni xsl:output quando l'output della trasformazione è stato inviato a un oggetto XmlWriter. La XslCompiledTransform classe dispone di una OutputSettings proprietà che restituisce un XmlWriterSettings oggetto contenente le informazioni di output derivate dall'elemento xsl:output del foglio di stile. L'oggetto XmlWriterSettings viene utilizzato per creare un XmlWriter oggetto con le impostazioni corrette che possono essere passate al Transform metodo . Il codice C# seguente illustra questo comportamento:

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

Opzione debug

La XslCompiledTransform classe può generare informazioni di debug, che consente di eseguire il debug del foglio di stile con il debugger di Microsoft Visual Studio. Per altre informazioni, vedere XslCompiledTransform(Boolean).

Differenze comportamentali

Trasformazione in XmlReader

La classe XslTransform offre diversi overload di Transform che restituiscono i risultati delle trasformazioni sotto forma di un oggetto XmlReader. Questi overload possono essere usati per caricare i risultati della trasformazione in una rappresentazione in memoria (ad esempio XmlDocument o XPathDocument) senza incorrere nell'overhead della serializzazione e della deserializzazione dell'albero XML risultante. Il codice C# seguente illustra come caricare i risultati della trasformazione in un XmlDocument oggetto .

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

La XslCompiledTransform classe non supporta la trasformazione in un XmlReader oggetto . Tuttavia, è possibile eseguire operazioni simili usando il CreateNavigator metodo per caricare l'albero XML risultante direttamente da un oggetto XmlWriter. Il codice C# seguente illustra come eseguire la stessa attività usando 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);
}

Comportamento discrezionale

La raccomandazione W3C XSL Transformations (XSLT) versione 1.0 include aree in cui il provider di implementazione può decidere come gestire una situazione. Queste aree sono considerate un comportamento discrezionale. Esistono diverse aree in cui l'oggetto XslCompiledTransform si comporta in modo diverso rispetto alla XslTransform classe . Per altre informazioni, vedere Errori XSLT ripristinabili.

Oggetti di estensione e funzioni script

XslCompiledTransform introduce due nuove restrizioni sull'uso delle funzioni script:

  • Solo i metodi pubblici possono essere chiamati da espressioni XPath.

  • Gli overload sono distinguibili l'uno dall'altro in base al numero di argomenti. Se più di un overload ha lo stesso numero di argomenti, verrà generata un'eccezione.

In XslCompiledTransform, un'associazione (ricerca del nome del metodo) alle funzioni script viene eseguita in fase di compilazione e i fogli di stile usati con XslTransform possono causare un'eccezione quando vengono caricati con XslCompiledTransform.

XslCompiledTransform supporta elementi figlio msxsl:using e msxsl:assembly all'interno dell'elemento msxsl:script. Gli elementi msxsl:using e msxsl:assembly vengono utilizzati per dichiarare namespace e assembly aggiuntivi da usare nel blocco di script. Per ulteriori informazioni, vedere Blocchi di script con msxsl:script.

XslCompiledTransform impedisce oggetti di estensione con più overload con lo stesso numero di argomenti.

Funzioni MSXML

Il supporto per altre funzioni MSXML è stato aggiunto alla XslCompiledTransform classe . L'elenco seguente descrive le funzionalità nuove o migliorate:

Vedere anche