Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Architektura XSLT została przeprojektowana w wersji programu Visual Studio 2005. Klasa XslTransform została zastąpiona przez klasę XslCompiledTransform .
W poniższych sekcjach opisano niektóre główne różnice między klasami XslCompiledTransform i XslTransform .
Wydajność
Klasa XslCompiledTransform zawiera wiele ulepszeń wydajności. Nowy procesor XSLT kompiluje arkusz stylów XSLT w dół do wspólnego formatu pośredniego, podobnie jak środowisko uruchomieniowe języka wspólnego (CLR) dla innych języków programowania. Po skompilowaniu arkusza stylów można go buforować i używać ponownie.
Klasa XslCompiledTransform zawiera również inne optymalizacje, które sprawiają, że znacznie szybciej niż XslTransform klasa.
Uwaga / Notatka
Mimo że ogólna wydajność klasy XslCompiledTransform jest lepsza niż klasy XslTransform, metoda Load klasy XslCompiledTransform może działać wolniej niż metoda Load klasy XslTransform przy pierwszym wywołaniu na przekształceniu. Dzieje się tak, ponieważ przed załadowaniem należy skompilować plik XSLT. Aby uzyskać więcej informacji, zobacz następujący wpis w blogu: XslCompiledTransform Wolniejsze niż XslTransform?
Bezpieczeństwo
Domyślnie XslCompiledTransform klasa wyłącza obsługę funkcji XSLT document() i osadzonego tworzenia skryptów. Te funkcje można włączyć, tworząc XsltSettings obiekt z włączonymi funkcjami i przekazując go do Load metody . W poniższym przykładzie pokazano, jak włączyć skrypty i wykonać transformację XSLT.
Uwaga / Notatka
Bloki skryptów są obsługiwane tylko w programie .NET Framework. Nie są one obsługiwane na platformie .NET Core lub .NET 5 lub nowszym.
// 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")
Aby uzyskać więcej informacji, zobacz Zagadnienia dotyczące zabezpieczeń XSLT.
Nowe funkcje
Pliki tymczasowe
Pliki tymczasowe są czasami generowane podczas przetwarzania XSLT. Jeśli arkusz stylów zawiera bloki skryptów lub jeśli jest kompilowany z ustawieniem debugowania ustawionym na wartość true, pliki tymczasowe mogą zostać utworzone w folderze %TEMP%. Może się zdarzyć, że niektóre pliki tymczasowe nie zostaną usunięte z powodu problemów czasowych. Jeśli na przykład pliki są używane przez bieżący element AppDomain lub debuger, finalizator TempFileCollection obiektu nie będzie mógł ich usunąć.
Właściwość TemporaryFiles może służyć do dodatkowego czyszczenia, aby upewnić się, że wszystkie pliki tymczasowe są usuwane z klienta.
Obsługa elementów xsl:output i XmlWriter
Klasa XslTransform ignorowała xsl:output ustawienia, gdy dane wyjściowe przekształcenia zostały wysłane do XmlWriter obiektu. Klasa XslCompiledTransform ma OutputSettings właściwość, która zwraca XmlWriterSettings obiekt zawierający informacje wyjściowe pochodzące z xsl:output elementu arkusza stylów. Obiekt XmlWriterSettings służy do tworzenia XmlWriter obiektu z poprawnymi ustawieniami, które można przekazać do Transform metody. Poniższy kod w języku C# ilustruje to zachowanie:
// 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();
Opcja debugowania
Klasa XslCompiledTransform może generować informacje debugowania, co umożliwia debugowanie arkusza stylów za pomocą debugera programu Microsoft Visual Studio. Aby uzyskać więcej informacji, zobacz XslCompiledTransform(Boolean).
Różnice behawioralne
Przekształcanie na XmlReader
Klasa XslTransform ma kilka przeciążeń Transform, które zwracają wyniki transformacji jako obiekt XmlReader. Te przeciążenia mogą służyć do ładowania wyników przekształcania do reprezentacji w pamięci (takiej jak XmlDocument lub XPathDocument) bez ponoszenia kosztów serializacji i deserializacji wynikowego drzewa XML. Poniższy kod w języku C# pokazuje, jak załadować wyniki przekształcenia do XmlDocument obiektu.
// 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));
Klasa XslCompiledTransform nie obsługuje przekształcania do XmlReader obiektu. Można jednak wykonać podobne czynności przy użyciu CreateNavigator metody w celu załadowania wynikowego drzewa XML bezpośrednio z obiektu XmlWriter. Poniższy kod w języku C# pokazuje, jak wykonać to samo zadanie przy użyciu polecenia 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);
}
Zachowanie dyskrecyjne
Rekomendacja dotycząca transformacji XSL W3C (XSLT) w wersji 1.0 zawiera obszary, w których dostawca implementacji może zdecydować, jak postąpić w danej sytuacji. Te zachowania są uważane za uznaniowe. Istnieje kilka obszarów, w których zachowanie XslCompiledTransform różni się od klasy XslTransform. Aby uzyskać więcej informacji, zobacz Błędy XSLT możliwe do odzyskania.
Obiekty rozszerzeń i funkcje skryptów
XslCompiledTransform wprowadza dwa nowe ograniczenia dotyczące korzystania z funkcji skryptu:
Tylko metody publiczne mogą być wywoływane z wyrażeń XPath.
Przeciążenia są rozróżnialne od siebie na podstawie liczby argumentów. Jeśli więcej niż jedno przeciążenie ma taką samą liczbę argumentów, zostanie zgłoszony wyjątek.
W XslCompiledTransform powiązanie (wyszukiwanie nazwy metody) z funkcjami skryptu odbywa się w czasie kompilacji, a arkusze stylów, które działały z XslTransform, mogą powodować wyjątek podczas ładowania przy użyciu XslCompiledTransform.
XslCompiledTransform obsługuje elementy podrzędne msxsl:using i msxsl:assembly w elemencie msxsl:script.
msxsl:using i msxsl:assembly elementy służą do deklarowania dodatkowych przestrzeni nazw i zestawów do użycia w bloku skryptu. Aby uzyskać więcej informacji, zobacz Bloki skryptów przy użyciu biblioteki msxsl:script .
XslCompiledTransform uniemożliwia użycie obiektów rozszerzeń, które mają wiele przeciążeń z tą samą liczbą argumentów.
Funkcje MSXML
Dodano obsługę dodatkowych funkcji MSXML do XslCompiledTransform klasy. Poniższa lista zawiera opis nowych lub ulepszonych funkcji:
msxsl:node-set: XslTransform wymaga, aby argument funkcji node-set był fragmentem drzewa wyników. Klasa XslCompiledTransform nie ma tego wymagania.
msxsl:version: ta funkcja jest obsługiwana w systemie XslCompiledTransform.
Funkcje rozszerzenia XPath: funkcja ms:string-compare, funkcja ms:utc, funkcja ms:namespace-uri, funkcja ms:local-name, funkcja ms:number, funkcja ms:format-date i funkcja ms:format-time są teraz obsługiwane.
Funkcje rozszerzeń XPath związane ze schematem: funkcje te nie są obsługiwane natywnie przez XslCompiledTransform program. Można je jednak zaimplementować jako funkcje rozszerzenia.