네임스페이스가 포함된 XPath 쿼리 실행(SQLXML 관리되는 클래스)

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

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

다음 예의 XPath 쿼리에서는 와일드카드 문자(*)와 local-name()namespace-uri() XPath 함수를 사용하여 네임스페이스를 지정합니다. 이 XPath 쿼리는 로컬 이름이 Employee이고 네임스페이스 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")에는 네임스페이스가 포함되어야 합니다.

다음 C# 예제 응용 프로그램은 위의 XSD 스키마(MySchema.xml)에 대해 XPath 쿼리를 실행합니다. 접두사를 확인하기 위해 SqlXmlCommand 개체의 Namespaces 속성을 사용하여 네임스페이스 바인딩을 지정합니다.

[!참고]

코드에서 연결 문자열에 SQL Server 인스턴스의 이름을 지정해야 합니다.

using System;
using Microsoft.Data.SqlXml;
using System.IO;
class Test
{
      static string ConnString = "Provider=SQLOLEDB;Server=(local);database=AdventureWorks;Integrated Security=SSPI";
      public static int testXPath()
      {
         //Stream strm;
         SqlXmlCommand cmd = new SqlXmlCommand(ConnString);
         cmd.CommandText = "x:Contact[@CID='1']";
         cmd.CommandType = SqlXmlCommandType.XPath;
         cmd.RootTag = "ROOT";
         cmd.Namespaces = "xmlns:x='urn:myschema:Contacts'";
         cmd.SchemaPath = "MySchema.xml";
         using (Stream strm = cmd.ExecuteStream()){
            using (StreamReader sr = new StreamReader(strm)){
               Console.WriteLine(sr.ReadToEnd());
            }
         }
         return 0;
      }
      public static int Main(String[] args)
      {
         testXPath();
         return 0;
      }
   }

이 예를 테스트하려면 컴퓨터에 Microsoft .NET Framework가 설치되어 있어야 합니다.

응용 프로그램을 테스트하려면

  1. 이 예에서 제공하는 XSD 스키마(MySchema.xml)를 폴더에 저장합니다.

  2. 이 예에서 제공하는 C# 코드(DocSample.cs)를 스키마가 저장된 폴더와 같은 폴더에 저장합니다. (다른 폴더에 파일을 저장하는 경우 코드를 편집하여 매핑 스키마에 대해 적합한 디렉터리 경로를 지정해야 합니다.)

  3. 코드를 컴파일합니다. 다음을 사용하여 명령 프롬프트에서 코드를 컴파일합니다.

    csc /reference:Microsoft.Data.SqlXML.dll DocSample.cs
    

    이렇게 하면 실행 파일(DocSample.exe)이 만들어집니다.

  4. 명령 프롬프트에서 DocSample.exe를 실행합니다.