XPath 쿼리에는 네임스페이스가 포함될 수 있습니다. 스키마 요소가 네임스페이스로 한정된 경우(즉, 대상 네임스페이스를 포함하는 경우) 스키마에 대한 XPath 쿼리에서 이 네임스페이스를 지정해야 합니다.
SQLXML 4.0에서는 와일드카드 문자(*)를 사용할 수 없으므로 네임스페이스 접두사를 사용하여 XPath 쿼리를 지정해야 합니다. 이 접두사를 해결하려면 네임스페이스 속성을 사용하여 네임스페이스 바인딩을 지정합니다.
다음 예제에서 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 애플리케이션입니다. 접두사를 확인하기 위해 네임스페이스 바인딩은 네임스페이스 속성을 사용하여 지정됩니다.
비고
코드에서 연결 문자열에 SQL Server 인스턴스의 이름을 제공해야 합니다. 또한 이 예제에서는 추가 네트워크 클라이언트 소프트웨어를 설치해야 하는 데이터 공급자에 대한 SQL Server SQLNCLI11(Native Client)의 사용을 지정합니다. 자세한 내용은 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
이 애플리케이션을 테스트하려면
샘플 XSD 스키마를 폴더에 저장합니다.
Visual Basic 실행 파일을 만들고 코드를 복사합니다. 지정된 디렉터리 경로를 적절하게 변경합니다.
다음 프로젝트 참조를 추가합니다.
"Microsoft ActiveX Data Objects 2.8 Library"애플리케이션을 실행합니다.
다음은 결과의 일부입니다.
<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 문서에서 생성된 접두사는 임의이지만 동일한 네임스페이스에 매핑됩니다.