Panduan: Melakukan transformasi XSLT dengan menggunakan assembly
Catatan
Blok skrip hanya didukung dalam .NET Framework. Blok skrip tidak didukung di .NET Core atau .NET 5 atau yang lebih baru.
Pengompilasi XSLT (xsltc.exe) mengompilasi lembar gaya XSLT dan menghasilkan assembly. Assembly dapat diteruskan langsung ke metode XslCompiledTransform.Load(Type).
Untuk menyalin file XML dan XSLT ke komputer lokal Anda
Salin file XSLT ke komputer lokal Anda dan beri nama Transform.xsl.
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:user="urn:my-scripts"> <msxsl:script language="C#" implements-prefix="user"> <![CDATA[ public string discount(string price){ char[] trimChars = { '$' }; //trim leading $, convert price to type double double discount_value = Convert.ToDouble(price.TrimStart(trimChars)); //apply 10% discount and round appropriately discount_value = .9*discount_value; //convert value to decimal and format as currency string discount_price = discount_value.ToString("C"); return discount_price; } ]]> </msxsl:script> <xsl:template match="catalog"> <html> <head></head> <body> <table border="1"> <tr> <th align="left">Title</th> <th align="left">Author</th> <th align="left">Genre</th> <th align="left">Publish Date</th> <th align="left">Price</th> </tr> <xsl:for-each select="book"> <tr> <td> <xsl:value-of select="title"/> </td> <td> <xsl:value-of select="author"/> </td> <td> <xsl:value-of select="genre"/> </td> <td> <xsl:value-of select="publish_date"/> </td> <xsl:choose> <xsl:when test="genre = 'Fantasy'"> <td> <xsl:value-of select="user:discount(price)"/> </td> </xsl:when> <xsl:otherwise> <td> <xsl:value-of select="price"/> </td> </xsl:otherwise> </xsl:choose> </tr> </xsl:for-each> </table> </body> </html> </xsl:template> </xsl:stylesheet>
Salin file XML ke komputer lokal Anda dan beri nama
books.xml
.<?xml version="1.0"?> <catalog> <book id="bk101"> <author>Gambardella, Matthew</author> <title>XML Developer's Guide</title> <genre>Computer</genre> <price>$44.95</price> <publish_date>2000-10-01</publish_date> </book> <book id="bk102"> <author>Ralls, Kim</author> <title>Midnight Rain</title> <genre>Fantasy</genre> <price>$5.95</price> <publish_date>2000-12-16</publish_date> </book> <book id="bk103"> <author>Corets, Eva</author> <title>Maeve Ascendant</title> <genre>Fantasy</genre> <price>$5.95</price> <publish_date>2000-11-17</publish_date> </book> <book id="bk106"> <author>Randall, Cynthia</author> <title>Lover Birds</title> <genre>Romance</genre> <price>$4.95</price> <publish_date>2000-09-02</publish_date> </book> <book id="bk107"> <author>Thurman, Paula</author> <title>Splish Splash</title> <genre>Romance</genre> <price>$4.95</price> <publish_date>2000-11-02</publish_date> </book> </catalog>
Untuk mengompilasi lembar gaya dengan skrip yang telah diaktifkan
Perintah berikut membuat dua assembly yang bernama Transform.dll
dan Transform_Script1.dll
. Ini adalah perilaku default. Kecuali ditentukan sebaliknya, nama kelas dan assembly default ke nama lembar gaya utama.
xsltc /settings:script+ Transform.xsl
Perintah berikut secara eksplisit mengatur nama kelas ke Transformasi:
xsltc /settings:script+ /class:Transform Transform.xsl
Untuk menyertakan assembly yang dikompilasi sebagai referensi saat Anda mengompilasi kode Anda
Anda dapat menyertakan assembly di Visual Studio dengan menambahkan referensi di Penjelajah Solusi atau dari baris perintah.
Untuk baris perintah dengan C#, gunakan yang berikut ini:
csc myCode.cs /r:system.dll;system.xml.dll;Transform.dll
Untuk baris perintah dengan Visual Basic, gunakan yang berikut ini
vbc myCode.vb /r:system.dll;system.xml.dll;Transform.dll
Untuk menggunakan assembly yang dikompilasi dalam kode Anda
Contoh berikut menunjukkan cara menjalankan transformasi XSLT dengan menggunakan lembar gaya yang dikompilasi.
using System;
using System.Xml.Xsl;
class Example
{
static void Main()
{
//Create a new XslCompiledTransform and load the compiled transformation.
XslCompiledTransform xslt = new XslCompiledTransform();
xslt.Load(typeof(Transform));
// Execute the transformation and output the results to a file.
xslt.Transform("books.xml", "discount_books.html");
}
}
Imports System.Xml.Xsl
Module Module1
Sub Main()
'Create a new XslCompiledTransform and load the compiled transformation.
Dim xslt As New XslCompiledTransform()
xslt.Load(GetType(Transform))
'Execute the transform and output the results to a file.
xslt.Transform("books.xml", "discount_books.html")
End Sub
End Module
Untuk menautkan secara dinamis ke assembly yang dikompilasi, ganti
xslt.Load(typeof(Transform));
dengan
xslt.Load(System.Reflection.Assembly.Load("Transform").GetType("Transform"));
Untuk informasi selengkapnya mengenai metode Assembly.Load
, lihat Load.