Migrowanie z klasy XslTransform

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

Mimo że ogólna wydajność XslCompiledTransform klasy jest lepsza niż XslTransform klasa, Load metoda klasy może działać wolniej niż Load metoda XslCompiledTransformXslTransform klasy przy pierwszym wywołaniu przekształcenia. 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?

Zabezpieczenia

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

Bloki skryptów są obsługiwane tylko w programie .NET Framework. Nieone 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 jest kompilowany z ustawieniem debugowania ustawionym na wartość true, pliki tymczasowe mogą zostać utworzone w folderze %TEMP%. Mogą wystąpić wystąpienia, gdy niektóre pliki tymczasowe nie zostaną usunięte z powodu problemów z chronometrażem. 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 w element XmlReader

Klasa XslTransform ma kilka przeciążeń Przekształć, które zwracają wyniki transformacji jako XmlReader obiekt. Te przeciążenia mogą służyć do ładowania wyników transformacji do reprezentacji w pamięci (takiej jak XmlDocument lub XPathDocument) bez ponoszenia narzutu na 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

Zalecenie przekształcenia XSL W3C (XSLT) w wersji 1.0 zawiera obszary, w których dostawca implementacji może zdecydować, jak poradzić sobie z sytuacją. Te obszary są uważane za zachowanie uznaniowe. Istnieje kilka obszarów, w których XslCompiledTransform zachowanie różni się od XslTransform klasy. Aby uzyskać więcej informacji, zobacz Odzyskiwanie możliwych do odzyskania błędów XSLT.

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 XslCompiledTransformsystemie powiązanie (wyszukiwanie nazwy metody) z funkcjami skryptu występuje w czasie kompilacji, a arkusze stylów, które pracowały z elementem XslTransform, mogą powodować wyjątek podczas ładowania za pomocą XslCompiledTransformpolecenia .

XslCompiledTransform program obsługuje elementy elementów msxsl:using podrzędnych i msxsl:assembly w elemecie msxsl:script . msxsl:using Elementy i msxsl:assembly 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 obiektom rozszerzenia, które mają wiele przeciążeń o tej samej liczbie argumentów.

Funkcje MSXML

Dodano obsługę dodatkowych funkcji MSXML do XslCompiledTransform klasy. Poniższa lista zawiera opis nowych lub ulepszonych funkcji:

Zobacz też