Partilhar via


Aplicando uma transformação XSL (classes gerenciadas SQLXML)

Aplica-se a:SQL ServerBanco de Dados SQL do Azure

Neste exemplo, uma consulta SQL é executada contra a base de dados AdventureWorks. A transformação XSL é aplicada ao resultado da consulta para gerar uma tabela de duas colunas com os nomes próprios e apelidos dos colaboradores.

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

Observação

No código, deve fornecer o nome da instância do Microsoft SQL Server na cadeia de ligaçã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 estilo XSL que pode usar para testar a aplicação:

<?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, deve ter o Microsoft .NET Framework instalado no seu computador.

Para testar a aplicação

  1. Guarde a folha de estilo XSL num ficheiro (MyXSL.xsl).

  2. Guarde o código C# (DocSample.cs) fornecido neste exemplo na mesma pasta onde a folha de estilo está armazenada.

  3. Compila o código. Para compilar o código no prompt de comandos, use:

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

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

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

Aplicação de uma Transformação XSL no .NET Framework

Em vez de aplicar uma transformação XSL no nível intermédio, como descrito anteriormente, pode aplicar uma transformação XSL do lado do cliente (no .NET Framework). O código C# revisto a seguir mostra como a transformação XSL é aplicada no .NET Framework.

Observação

No código, deve 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;  
      }  
   }