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 다음과 같은 각 방법으로 쿼리에서 사용할 수 있습니다.
XmlNamespaceManager 개체는 XPathExpression 개체의 SetContext 메서드를 사용하여 기존 XPathExpression 개체와 연결됩니다. XPath 식과 XPathExpression 개체를 나타내는 문자열을 매개 변수로 사용하고 새 Compile 개체를 반환하는 정적 XmlNamespaceManager 메서드를 사용하여 새 XPathExpression 개체를 컴파일할 수도 있습니다.
XmlNamespaceManager 개체 자체는 XPath 식을 나타내는 문자열과 함께 수락 XPathNavigator 클래스 메서드에 매개 변수로 전달됩니다.
다음은 인터페이스에서 파생된 개체를 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);
참고하십시오
.NET