다음을 통해 공유


XPath 쿼리 및 네임스페이스

XPath 쿼리는 XML 문서에서 네임스페이스를 인식하며 네임스페이스 접두사를 사용하여 요소 및 특성 이름을 정규화할 수 있습니다. 네임스페이스 접두사로 요소 및 특성 이름을 정규화하면 XPath 쿼리에 의해 반환되는 노드가 특정 네임스페이스에 속한 노드로만 제한됩니다.

예를 들어, 접두사 books를 네임스페이스 http://www.contoso.com/books에 매핑하면 다음 XPath 쿼리 /books:books/books:book은 네임스페이스 book에 있는 http://www.contoso.com/books 요소만 선택합니다.

XmlNamespaceManager

XPath 쿼리에서 네임스페이스를 사용할 수 있도록 IXmlNamespaceResolver 클래스와 같은 XmlNamespaceManager 인터페이스에서 파생된 개체가 XPath 쿼리에 포함할 네임스페이스 URI 및 접두사로 구성됩니다.

다음과 같은 방법으로 쿼리에서 XmlNamespaceManager 개체를 사용할 수 있습니다.

다음은 XPathNavigator 인터페이스에서 파생된 개체를 매개 변수로 사용할 수 있는 IXmlNamespaceResolver 클래스의 메서드입니다.

기본 네임스페이스

다음 XML 문서에서는 빈 접두사가 있는 기본 네임스페이스를 사용하여 http://www.contoso.com/books 네임스페이스를 선언합니다.

<books xmlns="http://www.contoso.com/books">  
    <book>  
        <title>Title</title>  
        <author>Author Name</author>  
        <price>5.50</price>  
    </book>  
</books>  

XPath는 빈 접두사를 null 네임스페이스로 간주합니다. 즉, 네임스페이스에 매핑된 접두사만 XPath 쿼리에서 사용할 수 있습니다. 그러므로 XML 문서의 네임스페이스에 대해 쿼리하려는 경우 기본 네임스페이스라 하더라도 이에 대한 접두사를 정의해야 합니다.

예를 들어, 위의 XML 문서에 대한 접두사를 정의하지 않으면 XPath 쿼리 /books/book은 결과를 반환하지 않습니다.

네임스페이스에 없는 일부 노드와 기본 네임스페이스에 있는 일부 노드를 사용하여 문서를 쿼리하는 경우 접두사를 바인딩하여 모호성을 없애야 합니다.

다음 코드는 기본 네임스페이스에 대한 접두사를 정의하고 book 네임스페이스에서 모든 http://www.contoso.com/books 요소를 선택합니다.

Dim document As XPathDocument = New XPathDocument("books.xml")  
Dim navigator As XPathNavigator = document.CreateNavigator()  
Dim query As XPathExpression = navigator.Compile("/books:books/books:book")  
Dim manager As XmlNamespaceManager = New XmlNamespaceManager(navigator.NameTable)  
manager.AddNamespace("books", "http://www.contoso.com/books")  
query.SetContext(manager)  
Dim nodes As XPathNodeIterator = navigator.Select(query)  
XPathDocument document = new XPathDocument("books.xml");  
XPathNavigator navigator = document.CreateNavigator();  
XPathExpression query = navigator.Compile("/books:books/books:book");  
XmlNamespaceManager manager = new XmlNamespaceManager(navigator.NameTable);  
manager.AddNamespace("books", "http://www.contoso.com/books");  
query.SetContext(manager);  
XPathNodeIterator nodes = navigator.Select(query);  

참고 항목