Partager via


Procédure : effectuer une transformation XSLT à l'aide d'un assembly

Mise à jour : November 2007

Le compilateur XSLT (xsltc.exe) compile des feuilles de style XSLT et génère un assembly. L'assembly peut être passé directement dans la méthode XslCompiledTransform.Load(Type).

Pour copier les fichiers XML et XSLT sur votre ordinateur local

  • Copiez le fichier XSLT sur votre ordinateur local et nommez-le 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>
    
  • Copiez le fichier XML sur votre ordinateur local et nommez-le 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>
    

Pour compiler la feuille de style avec le script activé.

  • L'exécution de la commande suivante depuis la ligne de commande crée deux assemblys nommés Transform.dll et Transform_Script1.dll (C'est le comportement par défaut. Sauf spécification contraire, le nom de la classe et de l'assembly est par défaut celui de la feuille de style principale) :

    xsltc /settings:script+ Transform.xsl
    

La commande suivante donne explicitement à la classe le nom Transform :

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

Pour inclure l'assembly compilé comme référence lorsque vous compilez votre code.

  1. Vous pouvez inclure un assembly dans Visual Studio en ajoutant une référence dans l'Explorateur de solutions ou à partir de la ligne de commande.

  2. Pour la ligne de commande en C#, utilisez la syntaxe suivante :

    csc myCode.cs /r:system.dll;system.xml.dll;Transform.dll
    
  3. Pour la ligne de commande en Visual Basic, utilisez la syntaxe suivante :

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

Pour utiliser l'assembly compilé dans votre code.

  • L'exemple suivant montre comment exécuter la transformation XSLT à l'aide de la feuille de style compilée.
Imports System
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
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");
    } 
}

Pour établir de manière dynamique une liaison avec l'assembly compilé, remplacez

xslt.Load(typeof(Transform))

par

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

dans l'exemple ci-dessus. Pour plus d'informations sur la méthode Assembly.Load, voir Load.

Voir aussi

Concepts

Génération à partir de la ligne de commande

Référence

XSLT Compiler (xsltc.exe)

XslCompiledTransform

Autres ressources

Transformations XSLT