다음을 통해 공유


XPath 쿼리 및 네임스페이스

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

예를 들어 접두사 books가 네임스페이스 http://www.contoso.com/books에 매핑되는 경우, 다음의 XPath 쿼리 /books:books/books:book는 네임스페이스 book에서 해당 http://www.contoso.com/books 요소만 선택합니다.

The 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);  

참고하십시오