Condividi tramite


Applicazione di una trasformazione XSL (classi gestite SQLXML)

In questo esempio una query SQL viene eseguita sul database AdventureWorks. La trasformazione XSL viene applicata al risultato della query per generare una tabella a due colonne con i nomi e i cognomi dei dipendenti.

La proprietà XslPath dell'oggetto SqlXmlCommand viene utilizzata per specificare il file XSL e il relativo percorso di directory.

[!NOTA]

Nel codice è necessario specificare il nome dell'istanza di Microsoft SQL Server nella stringa di connessione.

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

Si tratta del foglio di stile XSL che è possibile utilizzare per testare l'applicazione:

<?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>

Per testare questo esempio, è necessario che nel computer sia installato Microsoft .NET Framework.

Per testare l'applicazione

  1. Salvare il foglio di stile XSL in un file (MyXSL.xsl).

  2. Salvare il codice C# (DocSample.cs) fornito in questo esempio nella stessa cartella nella quale viene archiviato il foglio di stile.

  3. Compilare il codice. Per compilare il codice al prompt dei comandi, utilizzare:

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

    Viene creato un file eseguibile (DocSample.exe).

  4. Al prompt dei comandi eseguire DocSample.exe.

Applicazione di una trasformazione XSL in .NET Framework

Anziché applicare una trasformazione XSL nel livello intermedio, come descritto precedentemente, in .NET Framework è possibile applicare una trasformazione XSL sul lato client. Nel codice C# modificato seguente viene illustrato in che modo la trasformazione XSL viene applicata in .NET Framework.

[!NOTA]

Nel codice è necessario specificare il nome dell'istanza di SQL Server nella stringa di connessione.

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