Migrace z třídy XslTransform

Architektura XSLT byla v sadě Visual Studio 2005 přepracována. Třída XslTransform byla nahrazena XslCompiledTransform třídou.

Následující části popisují některé hlavní rozdíly mezi třídami XslCompiledTransform a třídami XslTransform .

Výkon

Třída XslCompiledTransform obsahuje mnoho vylepšení výkonu. Nový procesor XSLT zkompiluje šablonu stylů XSLT do běžného přechodného formátu, podobně jako modul CLR (Common Language Runtime) v jiných programovacích jazycích. Jakmile je šablona stylů zkompilována, můžete ji uložit do mezipaměti a znovu použít.

Třída XslCompiledTransform obsahuje také další optimalizace, které z ní činí mnohem rychleji než XslTransform třída.

Poznámka:

I když je celkový výkon XslCompiledTransform třídy lepší než XslTransform třída, Load metoda XslCompiledTransform třídy může provádět pomaleji než Load metoda XslTransform třídy při prvním zavolání transformace. Důvodem je to, že soubor XSLT musí být zkompilován před načtením. Další informace najdete v následujícím blogovém příspěvku: XslCompiledTransform Slower než XslTransform?

Zabezpečení

Ve výchozím nastavení XslCompiledTransform třída zakáže podporu funkce XSLT document() a vložené skriptování. Tyto funkce lze povolit vytvořením objektu XsltSettings s povolenými funkcemi a jeho předáním metodě Load . Následující příklad ukazuje, jak povolit skriptování a provést transformaci XSLT.

Poznámka:

Bloky skriptů jsou podporovány pouze v rozhraní .NET Framework. Nejsou podporovány v .NET Core nebo .NET 5 nebo novější.

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

Další informace najdete v tématu Aspekty zabezpečení XSLT.

Nové funkce

Dočasné soubory

Dočasné soubory se někdy generují během zpracování XSLT. Pokud šablona stylů obsahuje bloky skriptu nebo je zkompilována s nastavením ladění nastavenou na hodnotu true, mohou být dočasné soubory vytvořeny ve složce %TEMP%. Některé dočasné soubory se můžou odstranit kvůli problémům s časováním. Pokud například soubory používají aktuální AppDomain nebo ladicí program, finalizátor objektu TempFileCollection je nebude moci odebrat.

Vlastnost TemporaryFiles lze použít k dalšímu vyčištění, aby se zajistilo, že všechny dočasné soubory jsou z klienta odebrány.

Podpora elementu xsl:output a XmlWriter

Třída XslTransform ignorovala xsl:output nastavení při odeslání výstupu transformace do objektu XmlWriter . XslCompiledTransform Třída má OutputSettings vlastnost, která vrací XmlWriterSettings objekt obsahující výstupní informace odvozené od xsl:output elementu šablony stylů. Objekt XmlWriterSettings se používá k vytvoření objektu XmlWriter se správným nastavením, které lze předat metodě Transform . Toto chování ilustruje následující kód jazyka C#:

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

Možnost ladění

Třída XslCompiledTransform může generovat ladicí informace, které umožňují ladit šablonu stylů pomocí ladicího programu sady Microsoft Visual Studio. Další informace naleznete v tématu XslCompiledTransform(Boolean).

Rozdíly v chování

Transformace na XmlReader

Třída XslTransform má několik přetížení transformace, které vrací výsledky transformace jako XmlReader objekt. Tato přetížení se dají použít k načtení výsledků transformace do reprezentace v paměti (například XmlDocument ) XPathDocumentbez režie serializace a deserializace výsledného stromu XML. Následující kód jazyka C# ukazuje, jak načíst výsledky transformace do objektu XmlDocument .

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

Třída XslCompiledTransform nepodporuje transformaci na XmlReader objekt. Můžete však provést něco podobného CreateNavigator pomocí metody k načtení výsledného stromu XML přímo z objektu XmlWriter. Následující kód jazyka C# ukazuje, jak provést stejnou úlohu pomocí 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);
}

Volitelné chování

Doporučení W3C XSL (XSLT) verze 1.0 obsahuje oblasti, ve kterých se poskytovatel implementace může rozhodnout, jak řešit situaci. Tyto oblasti jsou považovány za volitelné chování. Existuje několik oblastí, kde se XslCompiledTransform chová jinak než XslTransform třída. Další informace naleznete v tématu Obnovitelné chyby XSLT.

Rozšiřující objekty a funkce skriptů

XslCompiledTransform zavádí dvě nová omezení používání funkcí skriptu:

  • Z výrazů XPath lze volat pouze veřejné metody.

  • Přetížení se od sebe liší na základě počtu argumentů. Pokud má více než jedno přetížení stejný počet argumentů, vyvolá se výjimka.

V XslCompiledTransformpřípadě vazby (vyhledávání názvu metody) ke skriptovacím funkcím dochází v době kompilace a šablon stylů, které pracovaly s XslTransform, mohou způsobit výjimku při jejich načtení XslCompiledTransform.

XslCompiledTransform podporuje mít msxsl:using a msxsl:assembly podřízené prvky uvnitř elementu msxsl:script . Tyto msxsl:using prvky msxsl:assembly slouží k deklaraci dalších oborů názvů a sestavení pro použití v bloku skriptu. Další informace najdete v tématu Bloky skriptů pomocí msxsl:script .

XslCompiledTransform zakáže rozšiřující objekty, které mají více přetížení se stejným počtem argumentů.

Funkce MSXML

Do třídy byla přidána XslCompiledTransform podpora dalších funkcí MSXML. Následující seznam popisuje nové nebo vylepšené funkce:

Viz také