Udostępnij przez


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 / 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:

Zobacz także