Bagikan melalui


Migrasi Dari Kelas XslTransform

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

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

Penampilan

Kelas ini memiliki banyak peningkatan performa. Prosesor XSLT baru mengkompilasi lembar gaya XSLT ke format menengah 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 ini XslCompiledTransform juga mencakup pengoptimalan lain yang membuatnya jauh lebih cepat daripada XslTransform kelas.

Nota

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

Keamanan

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

Nota

Blok skrip hanya didukung di .NET Framework. Mereka tidak didukung pada .NET Core atau .NET 5 atau versi 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 XSLT.

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 situasi ketika beberapa file sementara tidak dihapus karena masalah waktu. Misalnya, jika file sedang digunakan oleh AppDomain saat ini atau oleh debugger, finalizer TempFileCollection objek 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 xsl:output pengaturan ketika output transformasi dikirim ke XmlWriter objek. Kelas XslCompiledTransform memiliki properti OutputSettings yang mengembalikan objek XmlWriterSettings yang berisi informasi keluaran yang berasal dari elemen dari lembar gaya xsl:output. Objek XmlWriterSettings digunakan untuk membuat XmlWriter objek dengan pengaturan yang benar yang dapat diteruskan ke Transform metode . 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 ini 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 memiliki beberapa transformasi kelebihan beban yang mengembalikan hasil transformasi sebagai XmlReader objek. 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 XmlDocument objek.

// 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 XmlReader objek. Namun, Anda dapat melakukan sesuatu yang serupa dengan menggunakan metode CreateNavigator untuk memuat pohon XML yang dihasilkan secara 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 W3C XSL Transformations (XSLT) Versi 1.0 mencakup area di mana penyedia implementasi dapat memutuskan cara menangani situasi. Area-area ini dianggap sebagai perilaku diskresi. Ada beberapa area di mana XslCompiledTransform berperilaku berbeda dibandingkan dengan 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 XPath.

  • 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 anak msxsl:using dan msxsl:assembly dalam elemen msxsl:script. Elemen msxsl:using dan msxsl:assembly digunakan untuk mendeklarasikan namespace 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 XslCompiledTransform kelas . Daftar berikut ini menjelaskan fungsionalitas baru atau yang ditingkatkan:

Lihat juga