Sdílet prostřednictvím


Postupy: Provedení transformace XSLT pomocí sestavení

Poznámka:

Bloky skriptů jsou podporovány pouze v rozhraní .NET Framework. Nejsou podporovány v .NET Core nebo .NET 5 nebo novější.

Kompilátor XSLT (xsltc.exe) zkompiluje šablony stylů XSLT a vygeneruje sestavení. Sestavení lze předat přímo do XslCompiledTransform.Load(Type) metody.

Kopírování souborů XML a XSLT do místního počítače

  • Zkopírujte soubor XSLT do místního počítače a pojmenujte ho 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>  
    
  • Zkopírujte soubor XML do místního počítače a pojmenujte ho 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>  
    

Kompilace šablony stylů s povoleným skriptem

Následující příkaz vytvoří dvě sestavení pojmenovaná Transform.dll a Transform_Script1.dll. Toto je výchozí chování. Pokud neurčíte jinak, název třídy a sestavení se ve výchozím nastavení nastaví na název hlavní šablony stylů.

xsltc /settings:script+ Transform.xsl  

Následující příkaz explicitně nastaví název třídy na transformaci:

xsltc /settings:script+ /class:Transform Transform.xsl  

Zahrnutí kompilovaného sestavení jako odkazu při kompilaci kódu

  1. Sestavení v sadě Visual Studio můžete zahrnout přidáním odkazu do Průzkumník řešení nebo z příkazového řádku.

  2. Pro příkazový řádek s jazykem C# použijte následující:

    csc myCode.cs /r:system.dll;system.xml.dll;Transform.dll  
    
  3. Pro příkazový řádek s jazykem Visual Basic použijte následující:

    vbc myCode.vb /r:system.dll;system.xml.dll;Transform.dll  
    

Použití kompilovaného sestavení v kódu

Následující příklad ukazuje, jak spustit transformaci XSLT pomocí zkompilované šablony stylů.

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

Pokud chcete dynamicky propojit kompilované sestavení, nahraďte

xslt.Load(typeof(Transform));  

with

xslt.Load(System.Reflection.Assembly.Load("Transform").GetType("Transform"));  

Další informace o Assembly.Load metodě naleznete v tématu Load.

Viz také