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


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

В этом примере 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>

Чтобы проверить этот пример, необходимо установить на компьютер платформу Microsoft .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;
      }
   }