Compartir a través de


Espacios de nombres y consultas XPath

Las consultas XPath distinguen los espacios de nombres de un documento XML y pueden utilizar prefijos de espacio de nombres para calificar nombres de atributos y elementos. Al calificar los nombres de atributos y elementos con un prefijo de espacio de nombres, se limitan los nodos que devuelve la consulta XPath a únicamente aquellos nodos que pertenecen a un espacio de nombres específico.

Por ejemplo, si el prefijo books se asigna al espacio de nombres http://www.contoso.com/books, la siguiente consulta /books:books/books:book XPath selecciona solo esos book elementos en el espacio de nombres http://www.contoso.com/books.

The XmlNamespaceManager

Para usar espacios de nombres en una consulta XPath, un objeto derivado de la IXmlNamespaceResolver interfaz como la XmlNamespaceManager clase se construye con el URI del espacio de nombres y el prefijo que se van a incluir en la consulta XPath.

El XmlNamespaceManager objeto se puede usar en la consulta de cada una de las maneras siguientes.

A continuación se muestran los métodos de la XPathNavigator clase que aceptan un objeto derivado de la IXmlNamespaceResolver interfaz como parámetro.

Espacio de nombres predeterminado

En el siguiente documento XML, se utiliza el espacio de nombres predeterminado con un prefijo vacío para declarar el espacio de nombres 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 trata el prefijo vacío como el espacio de nombres null. En otras palabras, en las consultas XPath solo se pueden usar prefijos que estén asignados a espacios de nombres. Esto significa que si desea consultar un espacio de nombres en un documento XML, incluso si es el espacio de nombres predeterminado, debe definir un prefijo para él.

Por ejemplo, sin definir un prefijo para el documento XML anterior, la consulta /books/book XPath no devolvería ningún resultado.

Se debe utilizar un prefijo para evitar ambigüedades al consultar documentos que tienen algunos nodos que no están en un espacio de nombres y otros que están en un espacio de nombres predeterminado.

El código siguiente define un prefijo para el espacio de nombres predeterminado y selecciona todos los book elementos del http://www.contoso.com/books espacio de nombres.

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

Consulte también