Compartir a través de


Cómo realizar una transformación XSLT mediante un ensamblado

El compilador XSLT (xsltc.exe) compila hojas de estilo XSLT y genera un ensamblado. Dicho ensamblado se puede pasar directamente al método XslCompiledTransform.Load(Type).

Para copiar los archivos XML y XSLT al ordenador

  • Copie el archivo XSLT en su ordenador y llámelo 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>
    
  • Copie el archivo XML en su ordenador y llámelo 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>
    

Para compilar la hoja de estilos con el script habilitado.

  • Si ejecuta la siguiente instrucción desde la línea de comandos, se crearán dos ensamblados, cuyos nombres son Transform.dll y Transform_Script1.dll (este es el comportamiento predeterminado. A menos que se especifique lo contrario, el nombre de la clase y del ensamblado será, de forma predeterminada, el nombre de la hoja de estilos principal):

    xsltc /settings:script+ Transform.xsl
    

La siguiente instrucción establece explícitamente el nombre de la clase en Transform:

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

Para incluir el ensamblado compilado como referencia a la hora de compilar el código.

  1. Puede incluir un ensamblado en Visual Studio agregando una referencia en el Explorador de soluciones, o bien desde la línea de comandos.

  2. En C#, utilice lo siguiente en la línea de comandos:

    csc myCode.cs /r:system.dll;system.xml.dll;Transform.dll
    
  3. En Visual Basic, utilice lo siguiente en la línea de comandos:

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

Para utilizar el ensamblado compilado en su código.

  • El siguiente ejemplo muestra cómo ejecutar la transformación XSLT utilizando la hoja de estilos compilada.
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");
    } 
}

Para vincular dinámicamente el ensamblado compilado, sustituya

xslt.Load(typeof(Transform))

con

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

en el ejemplo anterior. Para obtener más información acerca del método Assembly.Load, vea Load

Vea también

Referencia

Compilador XSLT (xsltc.exe)

XslCompiledTransform

Conceptos

Compilar la línea de comandos con csc.exe

Otros recursos

Transformaciones XSLT