Поделиться через


Применение преобразования XSL (управляемые классы SQLXML)

Область применения: SQL Server База данных SQL Azure

В этом примере SQL-запрос выполняется в базе данных AdventureWorks. Преобразование XSL применяется к результату запроса для формирования состоящей из двух столбцов таблицы с именами и фамилиями служащих.

Свойство XslPath объекта SqlXmlCommand используется для указания XSL-файла и пути к каталогу.

Примечание.

В коде необходимо указать имя экземпляра Microsoft SQL Server в строка подключения.

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

Вот таблица стилей XSL, которую можно использовать для тестирования приложения:

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

Чтобы протестировать этот пример, на компьютере должна быть установлена платформа .NET Framework Майкрософт.

Тестирование приложения

  1. Сохраните таблицу стилей XSL в файле (MyXSL.xsl).

  2. Сохраните код на языке C# (файл DocSample.cs), приведенный в этом примере, в той папке, где сохранена таблица стилей.

  3. Скомпилируйте код. Чтобы скомпилировать код из командной строки, введите следующую команду.

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

    Будет создан исполняемый файл (DocSample.exe).

  4. Запустите файл DocSample.exe из командной строки.

Применение преобразований XSL в .NET Framework

Преобразования XSL можно применять не только на среднем уровне, как это описано выше. Их можно использовать также на стороне клиента (в .NET Framework). Публикуемый ниже пересмотренный код на языке C# показывает, как преобразование XSL применяется в .NET Framework.

Примечание.

В коде необходимо указать имя экземпляра SQL Server в строка подключения.

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