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


Применение преобразования XSL (поставщик SQLXMLOLEDB)

В этом примере приложения ADO выполняется SQL-запрос, а преобразование XSL применяется к результату. Задание свойства ClientSideXML значение True применяет обработку набора строк на стороне клиента. Диалект команды имеет значение {5d531cb2-e6ed-11d2-b252-00c04f681b71}, так как SQL-запрос указан в шаблоне, и этот диалект необходимо указать при выполнении шаблона. Свойство xsl указывает XSL-файл, используемый для применения преобразования. Значение свойства Base Path используется для поиска XSL-файла. Если указать путь в значении свойства xsl, путь относится к пути, указанному в свойстве Base Path.

В этом примере показано, как использовать следующие свойства поставщика SQLXMLOLEDB:

  • ClientSideXML

  • xsl

В этом примере клиентского приложения ADO на сервере выполняется XML-шаблон, состоящий из SQL-запроса.

Так как свойство ClientSideXML имеет значение True, инструкция SELECT без предложения FOR XML отправляется на сервер. Сервер выполняет запрос и возвращает набор строк клиенту. Затем клиент применяет преобразование FOR XML к набору строк и создает XML-документ.

Свойство xsl указывается в приложении; Таким образом, преобразование XSL применяется к XML-документу, созданному на клиенте, и результатом является таблица с двумя столбцами.

Чтобы выполнить команду шаблона, необходимо указать диалект шаблона XML : {5d531cb2-e6ed-11d2-b252-00c04f681b71} .

Замечание

В коде необходимо указать имя экземпляра Microsoft SQL Server в строке подключения. Кроме того, в этом примере указывается использование собственного клиента SQL Server для поставщика данных, для которого требуется установить дополнительное клиентское программное обеспечение сети. Дополнительные сведения см. в разделе "Требования к системе" для собственного клиента SQL Server.

Option Explicit  
Sub main()  
Dim oTestStream As New ADODB.Stream  
Dim oTestConnection As New ADODB.Connection  
Dim oTestCommand As New ADODB.Command  
oTestConnection.Open "provider=SQLXMLOLEDB.4.0;data provider=SQLNCLI11;data source=SqlServerName;initial catalog=AdventureWorks;Integrated Security=SSPI;"  
Set oTestCommand.ActiveConnection = oTestConnection  
oTestCommand.Properties("ClientSideXML") = True  
oTestCommand.CommandText = _  
        "<ROOT xmlns:sql='urn:schemas-microsoft-com:xml-sql' >" & _  
       " <sql:query> " & _  
        "   SELECT TOP 25 FirstName, LastName FROM Person.Contact FOR XML AUTO " & _  
        "   </sql:query> " & _  
        " </ROOT> "  
oTestStream.Open  
' You need the dialect if you are executing a template.  
oTestCommand.Dialect = "{5d531cb2-e6ed-11d2-b252-00c04f681b71}"  
oTestCommand.Properties("Output Stream").Value = oTestStream  
oTestCommand.Properties("Base Path").Value = "c:\Schemas\SQLXML4\ExecuteTemplateWithXSL\"  
oTestCommand.Properties("xsl").Value = "myxsl.xsl"  
oTestCommand.Execute , , adExecuteStream  
  
oTestStream.Position = 0  
oTestStream.Charset = "utf-8"  
Debug.Print oTestStream.ReadText(adReadAll)  
End Sub  
Sub Form_Load()  
 main  
End Sub  

Следующий шаблон XSL. Результат применения этого шаблона XSL — это таблица с двумя столбцами.

<?xml version='1.0' encoding='UTF-8'?>            
 <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">   
  
    <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>