다음을 통해 공유


네임스페이스를 사용하여 XPath 쿼리 실행(SQLXML 관리 클래스)

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

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

다음 예제에서 XPath 쿼리는 와일드카드 문자(*) 및 local-name() 및 namespace-uri() XPath 함수를 사용하여 네임스페이스를 지정합니다. 이 XPath 쿼리는 로컬 이름이 있고 네임스페이스 URIurn:myschema:ContactsEmployee 다음과 같은 모든 요소를 반환합니다.

/*[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 개체의 네임스페이스 속성을 사용하여 네임스페이스 바인딩을 지정합니다.

비고

코드에서 연결 문자열에 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실행합니다.