次の方法で共有


名前空間を指定した XPath クエリの実行 (SQLXMLOLEDB Provider)

XPath クエリには名前空間を含めることができます。 スキーマ要素が名前空間修飾されている場合 (つまり、ターゲット名前空間が含まれている場合)、スキーマに対する XPath クエリでは、この名前空間を指定する必要があります。

SQLXML 4.0 ではワイルドカード文字 (*) の使用はサポートされていないため、名前空間プレフィックスを使用して XPath クエリを指定する必要があります。 このプレフィックスを解決するには、namespaces プロパティを使用して名前空間のバインドを指定します。

次の例では、XPath クエリは、ワイルドカード文字 (*) と local-name() 関数と namespace-uri() XPath 関数を使用して名前空間を指定します。 この XPath クエリは、ローカル名が Contact され、名前空間 URI が urn:myschema:Contactsされているすべての要素を返します。

/*[local-name() = 'Contact' and namespace-uri() = 'urn:myschema:Contacts']  

SQLXML 4.0 では、この XPath クエリを名前空間プレフィックスで指定する必要があります。 たとえば、 x:Contactです。ここで、 x は名前空間プレフィックスです。 次の XSD スキーマについて考えてみましょう。

<schema xmlns="http://www.w3.org/2001/XMLSchema"  
            xmlns:sql="urn:schemas-microsoft-com:mapping-schema"  
            xmlns:con="urn:myschema:Contacts"  
            targetNamespace="urn:myschema:Contacts">  
<complexType name="ContactType">  
  <attribute name="CID" sql:field="ContactID" type="ID"/>  
  <attribute name="FName" sql:field="FirstName" type="string"/>  
  <attribute name="LName" sql:field="LastName"/>   
</complexType>  
<element name="Contact" type="con:ContactType" sql:relation="Person.Contact"/>  
</schema>  

このスキーマはターゲット名前空間を定義するため、スキーマに対する XPath クエリ ("Employee" など) に名前空間を含める必要があります。

これは、上記の XSD スキーマに対して XPath クエリ (x:Employee) を実行するサンプルの Microsoft Visual Basic アプリケーションです。 プレフィックスを解決するために、名前空間バインディングは namespaces プロパティを使用して指定されます。

このコードでは、接続文字列に SQL Server のインスタンスの名前を指定する必要があります。 また、この例では、追加のネットワーク クライアント ソフトウェアをインストールする必要があるデータ プロバイダーに対する SQL Server Native Client (SQLNCLI11) の使用を指定します。 詳細については、「 SQL Server Native Client のシステム要件」を参照してください。

Option Explicit  
Private Sub Form_Load()  
    Dim con As New ADODB.Connection  
    Dim cmd As New ADODB.Command  
    Dim stm As New ADODB.Stream  
    con.Open "provider=SQLXMLOLEDB.4.0;Data Provider=SQLNCLI11;Data Source=SqlServerName;Initial Catalog=AdventureWorks;Integrated Security=SSPI;"  
    Set cmd.ActiveConnection = con  
    stm.Open  
    cmd.Properties("Output Stream").Value = stm  
    cmd.Properties("Output Encoding") = "utf-8"  
    cmd.Properties("Mapping schema") = "C:\DirectoryPath\con-ex.xml"  
    cmd.Properties("namespaces") = "xmlns:x='urn:myschema:Contacts'"  
    '  Debug.Print "Set Command Dialect to DBGUID_XPATH"  
    cmd.Dialect = "{ec2a4293-e898-11d2-b1b7-00c04f680c56}"  
    cmd.CommandText = "x:Contact"  
    cmd.Execute , , adExecuteStream   
    stm.Position = 0  
    Debug.Print stm.ReadText(adReadAll)  
End Sub  

このアプリケーションをテストするには

  1. サンプル XSD スキーマをフォルダーに保存します。

  2. Visual Basic 実行可能プロジェクトを作成し、そのプロジェクトにコードをコピーします。 必要に応じて、指定したディレクトリ パスを変更します。

  3. 次のプロジェクト参照を追加します。

    "Microsoft ActiveX Data Objects 2.8 Library"  
    
  4. アプリケーションを実行します。

結果の一部を次に示します。

<y0:Employee xmlns:y0="urn:myschema:Contacts"   
             LName="Achong" CID="1" FName="Gustavo"/>  
<y0:Employee xmlns:y0="urn:myschema:Employees"   
             LName="Abel" CID="2" FName="Catherine"/>  

XML ドキュメントで生成されるプレフィックスは任意ですが、同じ名前空間にマップされます。