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 XPath /books:books/books:book
solo selecciona los elementos book
en el espacio de nombres http://www.contoso.com/books
.
XmlNamespaceManager
Para utilizar espacios de nombres en una consulta XPath, se crea un objeto derivado de la interfaz IXmlNamespaceResolver como la clase XmlNamespaceManager con el prefijo e identificador URI de espacio de nombres para incluirlo en la consulta XPath.
El objeto XmlNamespaceManager se puede utilizar en la consulta en cada una de las siguientes formas.
El objeto XmlNamespaceManager se asocia a un objeto XPathExpression existente utilizando el método SetContext del objeto XPathExpression. También se puede compilar un nuevo objeto XPathExpression utilizando el método Compile estático que toma una cadena que representa la expresión XPath y un objeto XmlNamespaceManager como parámetros y devuelve un nuevo objeto XPathExpression.
El propio objeto XmlNamespaceManager se pasa como parámetro a un método de la clase XPathNavigator de aceptación junto con una cadena que representa la expresión XPath.
A continuación se enumeran los métodos de la clase XPathNavigator que aceptan un objeto derivado de la interfaz IXmlNamespaceResolver 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
. Dicho de otro modo, en las consultas XPath solo se pueden utilizar prefijos asignados a espacios de nombres. Esto significa que si desea realizar una consulta en un espacio de nombres de un documento XML, aunque se trate del espacio de nombres predeterminado, tiene que definir un prefijo para él.
Por ejemplo, si no se define un prefijo para el documento XML anterior, la consulta XPath /books/book
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.
En el siguiente código se define un prefijo para el espacio de nombres predeterminado y se seleccionan todos los elementos book
del espacio de nombres 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);
Vea también
- XmlDocument
- XPathDocument
- XPathNavigator
- Procesamiento de datos XML con el modelo de datos XPath
- Seleccionar datos XML con XPathNavigator
- Evaluación de expresiones XPath con XPathNavigator
- Coincidencia de nodos con XPathNavigator
- Tipos de nodos reconocidos con consultas XPath
- Expresiones XPath compiladas