Bagikan melalui


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

  1. Anda dapat menyertakan assembly di Visual Studio dengan menambahkan referensi di Penjelajah Solusi atau dari baris perintah.

  2. Untuk baris perintah dengan C#, gunakan yang berikut ini:

    csc myCode.cs /r:system.dll;system.xml.dll;Transform.dll  
    
  3. 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.

Lihat juga