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

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 문서에서 생성되는 접두사는 임의적이지만 동일한 네임스페이스에 매핑됩니다.