Compartir a través de


Aplicar una transformación XSL (clases administradas de SQLXML)

En este ejemplo se ejecuta una consulta SQL en la base de datos AdventureWorks. La transformación XSL se aplica al resultado de la consulta para generar una tabla de dos columnas con los nombres y los apellidos de los empleados.

La propiedad XslPath del objeto SqlXmlCommand se utiliza para especificar el archivo XSL y su ruta de acceso al directorio.

[!NOTA]

En el código, debe proporcionar el nombre de la instancia de Microsoft SQL Server en la cadena de conexión.

using System;
using Microsoft.Data.SqlXml;
using System.IO;
class Test
{
      static string ConnString = "Provider=SQLOLEDB;Server=(local);database=AdventureWorks;Integrated Security=SSPI";
      public static int testXSL()
      {
         //Stream strm;
         SqlXmlCommand cmd = new SqlXmlCommand(ConnString);
         cmd.CommandText = "SELECT TOP 20 FirstName, LastName FROM Person.Contact FOR XML AUTO";
         cmd.XslPath = "MyXSL.xsl";
         cmd.RootTag = "root";
         using (Stream strm = cmd.ExecuteStream()){
            using (StreamReader sr = new StreamReader(strm)){
               Console.WriteLine(sr.ReadToEnd());
            }
        }
         return 0;
      }
      public static int Main(String[] args)
      {
         testXSL();   
         return 0;
      }
   }

Ésta es la hoja de estilos XSL que puede utilizar para probar la aplicación:

<?xml version='1.0' encoding='UTF-8'?>
 <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> 
    <xsl:output method="html"/>
    <xsl:template match = '*'>
        <xsl:apply-templates />
    </xsl:template>
    <xsl:template match = 'Person.Contact'>
       <TR>
         <TD><xsl:value-of select = '@FirstName' /></TD>
         <TD><B><xsl:value-of select = '@LastName' /></B></TD>
       </TR>
    </xsl:template>
    <xsl:template match = '/'>
      <HTML>
        <HEAD>
           <STYLE>th { background-color: #CCCCCC }</STYLE>
        </HEAD>
        <BODY>
         <TABLE border='1' style='width:300;'>
           <TR><TH colspan='2'>Contacts</TH></TR>
           <TR><TH >First name</TH><TH>Last name</TH></TR>
           <xsl:apply-templates select = 'root' />
         </TABLE>
        </BODY>
      </HTML>
    </xsl:template>
</xsl:stylesheet>

Para probar este ejemplo, debe tener instalado Microsoft .NET Framework en el equipo.

Para probar la aplicación

  1. Guarde la hoja de estilos XSL en un archivo (MyXSL.xsl).

  2. Guarde el código de C# (DocSample.cs) que se proporciona en este ejemplo en la misma carpeta en la que está almacenada la hoja de estilos.

  3. Compile el código. Para compilar el código en el símbolo del sistema, use:

    csc /reference:Microsoft.Data.SqlXML.dll DocSample.cs
    

    Esto crea una aplicación ejecutable (DocSample.exe).

  4. En el símbolo del sistema, ejecute DocSample.exe.

Aplicar una transformación XSL en .NET Framework

En lugar de aplicar una transformación XSL en el nivel intermedio, tal y como se ha descrito previamente, puede aplicar una transformación XSL en el cliente (en .NET Framework). El siguiente código C# revisado muestra cómo se aplica la transformación XSL en .NET Framework.

[!NOTA]

En el código, debe suministrarse el nombre de la instancia de SQL Server en la cadena de conexión.

using System;
using System.Xml;
using Microsoft.Data.SqlXml;
using System.IO;
using System.Xml.XPath;
using System.Xml.Xsl;

class Test
{
      static string ConnString = "Provider=SQLOLEDB;Server=(local);database=AdventureWorks;Integrated Security=SSPI";
      public static int testXSL()
      {
         //Stream strm;
         SqlXmlCommand cmd = new SqlXmlCommand(ConnString);
         cmd.CommandText = "SELECT TOP 20 FirstName, LastName FROM Person.Contact FOR XML AUTO";
         cmd.RootTag = "root";
         using (Stream strm = cmd.ExecuteStream()){
            XmlReader reader = new XmlReader(strm);
            XPathDocument xd = new XPathDocument(reader, XmlSpace.Preserve);
            XslCompiledTransform xslt = new XslCompiledTransform();
            xslt.Load("MyXSL.xsl");
            XmlWriter writer = XmlWriter.Create("xslt_output.html");
            xslt.Transform(xd, writer);
            reader.Close();
            writer.Close();
         }
         return 0;
      }
      public static int Main(String[] args)
      {
         testXSL();   
         return 0;
      }
   }