Compartilhar via


Aplicando um XSL Transformation (classes gerenciadas SQLXML)

Neste exemplo, uma consulta SQL é executada no banco de dados AdventureWorks. A transformação XSL é aplicada ao resultado da consulta para gerar uma tabela de duas colunas com os nomes e sobrenomes dos funcionários.

A propriedade XslPath do objeto SqlXmlCommand é usada para especificar o arquivo XSL e seu caminho de diretório.

ObservaçãoObservação

No código, é necessário fornecer o nome da instância do Microsoft SQL Server na cadeia de conexão.

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;
      }
   }

Esta é a folha de estilos XSL que você pode usar para testar o aplicativo:

<?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 testar este exemplo, o Microsoft .NET Framework deverá estar instalado no computador.

Para testar o aplicativo

  1. Salve a folha de estilos XSL em um arquivo (MyXSL.xsl).

  2. Salve o código C# (DocSample.cs) que é fornecido neste exemplo na mesma pasta na qual a folha de estilos está armazenada.

  3. Compile o código. Para compilar o código no prompt de comando, use:

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

    Isso cria um executável (DocSample.exe).

  4. No prompt de comando, execute DocSample.exe.

Aplicando uma transformação XSL no .NET Framework

Em vez de aplicar uma transformação XSL na camada intermediária, como descrito anteriormente, você pode aplicar uma transformação XSL do lado do cliente (no .NET Framework). O código C# revisado a seguir mostra como a transformação XSL é aplicada no .NET Framework.

ObservaçãoObservação

No código, é necessário fornecer o nome da instância do SQL Server na cadeia de conexão.

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;
      }
   }