다음을 통해 공유


네임스페이스로 XPath 쿼리 실행(SQLXML 관리되는 클래스)

적용 대상: SQL ServerAzure SQL Database

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

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

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

참고 항목

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