Migrálás az XslTransform osztályból
Az XSLT-architektúra a Visual Studio 2005 kiadásában lett újratervezve. Az XslTransform osztály helyébe az XslCompiledTransform osztály lépett.
A következő szakaszok az osztályok és az osztályok közötti fő különbségek némelyikét XslCompiledTransform ismertetik XslTransform .
Teljesítmény
Az XslCompiledTransform osztály számos teljesítménybeli fejlesztést tartalmaz. Az új XSLT-processzor az XSLT stíluslapot egy közös köztes formátumra fordítja le, hasonlóan ahhoz, mint amit a közös nyelvi futtatókörnyezet (CLR) más programozási nyelvek esetében is végez. A stíluslap fordítása után gyorsítótárazható és újra felhasználható.
Az XslCompiledTransform osztály más optimalizálásokat is tartalmaz, amelyek sokkal gyorsabbak, mint az XslTransform osztály.
Feljegyzés
Bár az XslCompiledTransform osztály általános teljesítménye jobb, mint az XslTransform osztály, az LoadXslCompiledTransform osztály metódusa lassabban teljesíthet, mint az LoadXslTransform osztály metódusa, amikor először meghívják egy átalakításra. Ennek az az oka, hogy az XSLT-fájlt a betöltés előtt le kell fordítani. További információt a következő blogbejegyzésben talál: XslCompiledTransform Slower than XslTransform?
Biztonság
Alapértelmezés szerint az XslCompiledTransform osztály letiltja az XSLT-függvény document()
és a beágyazott szkriptek támogatását. Ezek a funkciók engedélyezhetők egy XsltSettings olyan objektum létrehozásával, amely engedélyezve van a funkciókkal, és átadja azt a Load metódusnak. Az alábbi példa bemutatja, hogyan engedélyezheti a szkriptelést, és hogyan hajthat végre XSLT-átalakítást.
Feljegyzés
A szkriptblokkok csak .NET-keretrendszer támogatottak. A .NET Core vagy a .NET 5 vagy újabb verziók nem támogatják őket.
// 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")
További információkért lásd az XSLT biztonsági szempontjait.
Új funkciók
Ideiglenes fájlok
Az XSLT-feldolgozás során időnként ideiglenes fájlok jönnek létre. Ha egy stíluslap parancsfájlblokkokat tartalmaz, vagy ha igaz hibakeresési beállítással van lefordítva, ideiglenes fájlok hozhatók létre a%TEMP% mappában. Előfordulhatnak olyan esetek, amikor bizonyos ideiglenes fájlok nem törlődnek időzítési problémák miatt. Ha például a fájlokat az aktuális AppDomain vagy a hibakereső használja, az objektum véglegesítője TempFileCollection nem tudja eltávolítani őket.
A TemporaryFiles tulajdonság további törlésre is használható annak érdekében, hogy az összes ideiglenes fájl el legyen távolítva az ügyfélből.
Az xsl:output elem és az XmlWriter támogatása
Az XslTransform osztály figyelmen kívül hagyta xsl:output
a beállításokat, amikor az átalakítás kimenete egy XmlWriter objektumnak lett elküldve. Az XslCompiledTransform osztálynak van egy OutputSettings tulajdonsága, amely egy XmlWriterSettings olyan objektumot ad vissza, amely a stíluslap eleméből xsl:output
származó kimeneti információkat tartalmazza. Az XmlWriterSettings objektummal olyan objektumot XmlWriter hozhat létre, amely a megfelelő beállításokat adja át a Transform metódusnak. A következő C#-kód a következő viselkedést szemlélteti:
// 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();
Hibakeresési lehetőség
Az XslCompiledTransform osztály hibakeresési információkat hozhat létre, amelyek lehetővé teszik a stíluslap hibakeresését a Microsoft Visual Studio Hibakeresővel. További információ: XslCompiledTransform(Boolean).
Viselkedésbeli különbségek
Átalakítás XmlReaderre
Az XslTransform osztály több átalakítás túlterheléssel rendelkezik, amelyek objektumként XmlReader visszaadják az átalakítási eredményeket. Ezek a túlterhelések az átalakítás eredményeinek memórián belüli ábrázolására (például vagy XPathDocument) való betöltésére használhatók anélkül, hogy XmlDocument az eredményül kapott XML-fa szerializálásának és deszerializálásának többletterhelése merült fel. Az alábbi C#-kód bemutatja, hogyan töltheti be az átalakítás eredményeit egy XmlDocument objektumba.
// 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));
Az XslCompiledTransform osztály nem támogatja az objektummá alakítást XmlReader . A metódussal azonban valami hasonlót is elvégezhet az CreateNavigator eredményül kapott XML-fa közvetlenül egy XmlWriterfájlból való betöltéséhez. Az alábbi C#-kód bemutatja, hogyan hajthatja végre ugyanazt a feladatot a következővel 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);
}
Diszkréciós viselkedés
A W3C XSL-átalakítások (XSLT) 1.0-s verziójára vonatkozó javaslat olyan területeket tartalmaz, ahol a megvalósítási szolgáltató eldöntheti, hogyan kezelje a helyzetet. Ezek a területek diszkrecionális viselkedésnek minősülnek. Több olyan terület is van, ahol a XslCompiledTransform viselkedés más, mint az XslTransform osztály. További információ: Helyreállítható XSLT-hibák.
Bővítményobjektumok és szkriptfüggvények
XslCompiledTransform két új korlátozást vezet be a szkriptfüggvények használatára:
Csak nyilvános metódusok hívhatók meg XPath-kifejezésekből.
A túlterhelések az argumentumok száma alapján megkülönböztethetők egymástól. Ha egynél több túlterhelés azonos számú argumentummal rendelkezik, a rendszer kivételt fog emelni.
Ebben XslCompiledTransformaz esetben a szkriptfüggvényekhez való kötés (metódusnév-keresés) fordításkor történik, és az XslTransformmal dolgozó stíluslapok kivételt okozhatnak, ha betöltik XslCompiledTransformőket.
XslCompiledTransform támogatja a gyermekelemeket msxsl:using
msxsl:assembly
az msxsl:script
elemen belül. msxsl:assembly
Az msxsl:using
és az elemek további névterek és szerelvények deklarálásához használhatók a szkriptblokkban. További információ: Szkriptblokkok msxsl:script használatával.
XslCompiledTransform Tiltja azokat a bővítményobjektumokat, amelyek több, azonos számú argumentummal rendelkező túlterheléssel rendelkeznek.
MSXML-függvények
További MSXML-függvények támogatása hozzáadva az XslCompiledTransform osztályhoz. Az alábbi lista az új vagy továbbfejlesztett funkciókat ismerteti:
msxsl:node-set: XslTransform a csomópontkészletfüggvény argumentumának eredményfatöredéknek kell lennie. Az XslCompiledTransform osztálynak nincs ilyen követelménye.
msxsl:version: Ez a függvény támogatott a XslCompiledTransform.
XPath-bővítményfüggvények: Mostantól támogatott az ms:string-compare függvény, az ms:utc függvény, az ms:namespace-uri függvény, az ms:local-name függvény, az ms:number függvény, az ms:format-date függvény és az ms:format-time függvény .
Sémával kapcsolatos XPath-bővítményfüggvények: Ezeket a függvényeket a rendszer natív módon nem támogatja XslCompiledTransform. Ezek azonban bővítményfüggvényekként is implementálhatók.