네임스페이스가 있는 XPath 쿼리 실행(SQLXMLOLEDB 공급자)

적용 대상: SQL Server Azure SQL 데이터베이스

XPath 쿼리에는 네임스페이스가 포함될 수 있습니다. 스키마 요소의 네임스페이스가 한정된 경우 즉, 스키마 요소에 대상 네임스페이스가 포함된 경우 스키마에 대한 XPath 쿼리에서 이 네임스페이스를 지정해야 합니다.

SQLXML 4.0에서는 와일드카드 문자(*)를 사용할 수 없으므로 네임스페이스 접두사를 사용하여 XPath 쿼리를 지정해야 합니다. 이 접두사를 resolve 네임스페이스 속성을 사용하여 네임스페이스 바인딩을 지정합니다.

다음 예제에서 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 애플리케이션입니다. 접두사를 resolve 네임스페이스 바인딩은 네임스페이스 속성을 사용하여 지정됩니다.

참고

코드에서 연결 문자열에 SQL Server instance 이름을 제공해야 합니다. 또한 이 예제에서는 추가 네트워크 클라이언트 소프트웨어를 설치해야 하는 데이터 공급자에 대한 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 문서에서 생성되는 접두사는 임의적이지만 동일한 네임스페이스에 매핑됩니다.