Memigrasikan Dari Kelas XslTransform

Arsitektur XSLT dirancang ulang dalam rilis Visual Studio 2005. Kelas XslTransform digantikan oleh kelas XslCompiledTransform.

Bagian berikut menjelaskan beberapa perbedaan utama antara kelas XslCompiledTransform dan XslTransform.

Performa

Kelas XslCompiledTransform ini mencakup banyak peningkatan performa. Prosesor XSLT baru mengompilasi lembar gaya XSLT ke format perantara umum, mirip dengan apa yang dilakukan runtime bahasa umum (CLR) untuk bahasa pemrograman lainnya. Setelah lembar gaya dikompilasi, lembar gaya dapat di-cache dan digunakan kembali.

Kelas XslCompiledTransform ini juga mencakup pengoptimalan lain yang membuatnya jauh lebih cepat daripada kelas XslTransform.

Catatan

Meskipun performa keseluruhan dari kelas XslCompiledTransform lebih baik daripada kelas XslTransform, metode Load dari kelas XslCompiledTransform mungkin berkinerja lebih lambat daripada metode Load dari kelas XslTransform saat pertama kali dipanggil pada transformasi. Ini karena file XSLT harus dikompilasi sebelum dimuat. Untuk informasi selengkapnya, lihat posting blog berikut: XslCompiledTransform Lebih Lambat dari XslTransform?

Keamanan

Secara default, kelas XslCompiledTransform menonaktifkan dukungan untuk fungsi document() XSLT dan skrip yang disematkan. Fitur-fitur ini dapat diaktifkan dengan membuat objek XsltSettings yang mengaktifkan fitur dan meneruskannya ke metode Load. Contoh berikut menunjukkan cara mengaktifkan pembuatan skrip dan melakukan transformasi XSLT.

Catatan

Blok skrip hanya didukung dalam .NET Framework. Blok skrip tidak didukung di .NET Core atau .NET 5 atau yang lebih baru.

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

Untuk informasi selengkapnya, lihat Pertimbangan Keamanan Pergerakan Data.

Fitur baru

File Sementara

File sementara terkadang dihasilkan selama pemrosesan XSLT. Jika lembar gaya berisi blok skrip, atau jika dikompilasi dengan pengaturan debug diatur ke true, file sementara dapat dibuat di folder %TEMP%. Mungkin ada instans ketika beberapa file sementara tidak dihapus karena masalah waktu. Misalnya, jika file sedang digunakan oleh AppDomain saat ini atau oleh debugger, finalizer objek TempFileCollection tidak akan dapat menghapusnya.

Properti TemporaryFiles dapat digunakan untuk pembersihan tambahan untuk memastikan bahwa semua file sementara dihapus dari klien.

Dukungan untuk Elemen xsl:output dan XmlWriter

Kelas XslTransform mengabaikan pengaturan xsl:output ketika output transformasi dikirim ke objek XmlWriter. Kelas XslCompiledTransform memiliki properti OutputSettings yang mengembalikan objek yang XmlWriterSettings berisi informasi output yang berasal dari elemen xsl:output lembar gaya. Objek XmlWriterSettings digunakan untuk membuat objek XmlWriter dengan pengaturan yang benar yang dapat diteruskan ke metode Transform. Kode C# berikut mengilustrasikan perilaku ini:

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

Opsi Debug

Kelas XslCompiledTransform dapat menghasilkan informasi debug, yang memungkinkan Anda men-debug lembar gaya dengan Microsoft Visual Studio Debugger. Lihat XslCompiledTransform(Boolean) untuk informasi lebih lanjut.

Perbedaan Perilaku

Mengubah ke XmlReader

Kelas XslTransform ini memiliki beberapa Kelebihan transformasi yang mengembalikan hasil transformasi sebagai objek XmlReader. Kelebihan beban ini dapat digunakan untuk memuat hasil transformasi ke dalam representasi dalam memori (seperti XmlDocument atau XPathDocument) tanpa menimbulkan overhead serialisasi dan deserialisasi pohon XML yang dihasilkan. Kode C# berikut menunjukkan cara memuat hasil transformasi ke dalam objek 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));

Kelas XslCompiledTransform tidak mendukung transformasi ke objek XmlReader. Namun, Anda dapat melakukan sesuatu yang serupa dengan menggunakan metode CreateNavigator untuk memuat pohon XML yang dihasilkan langsung dari XmlWriter. Kode C# berikut menunjukkan cara menyelesaikan tugas yang sama menggunakan 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);
}

Perilaku Diskresi

Rekomendasi Transformasi W3C XSL (XSLT) Versi 1.0 mencakup area di mana penyedia implementasi dapat memutuskan cara menangani situasi. Area-area ini dianggap sebagai perilaku diskresi. Terdapat beberapa area di mana perilaku XslCompiledTransformnya berbeda dari kelas XslTransform. Untuk informasi selengkapnya, lihat Kesalahan XSLT yang Dapat Dipulihkan.

Objek Ekstensi dan Fungsi Skrip

XslCompiledTransform memperkenalkan dua batasan baru tentang penggunaan fungsi skrip:

  • Hanya metode publik yang dapat dipanggil dari ekspresi JalurX.

  • Kelebihan beban dapat dibedakan satu sama lain berdasarkan jumlah argumen. Jika lebih dari satu kelebihan beban memiliki jumlah argumen yang sama, pengecualian akan dinaikkan.

Dalam XslCompiledTransform, pengikatan (pencarian nama metode) ke fungsi skrip terjadi pada waktu kompilasi, dan lembar gaya yang bekerja dengan XslTransform dapat menyebabkan pengecualian ketika dimuat dengan XslCompiledTransform.

XslCompiledTransform mendukung elemen yang memiliki turunan msxsl:using dan msxsl:assembly dalam elemen msxsl:script. Elemen msxsl:using dan msxsl:assembly digunakan untuk mendeklarasikan namespace layanan dan rakitan tambahan untuk digunakan dalam blok skrip. Lihat Blok Skrip Menggunakan msxsl:script untuk informasi selengkapnya.

XslCompiledTransform melarang objek ekstensi yang memiliki beberapa kelebihan beban dengan jumlah argumen yang sama.

Fungsi MSXML

Dukungan untuk fungsi MSXML tambahan telah ditambahkan ke kelas XslCompiledTransform. Daftar berikut ini menjelaskan fungsionalitas baru atau yang ditingkatkan:

Lihat juga