Comprobaciones de nombres
Comprobar el nombre es la forma más habitual de realizar una prueba de nodo ya que le permite especificar de manera explícita el nombre de los nodos que desea seleccionar.Sin embargo, con solo especificar un nombre de nodo no se consigue seleccionar el nodo adecuado ya que un árbol de documentos puede tener varios tipos de nodos con el mismo nombre.Para seleccionar el nodo adecuado, una comprobación de nombre selecciona solo aquellos nodos cuyo nombre coincide con el nombre especificado y cuyo tipo de nodo coincide con el tipo de nodo principal del eje especificado.
La siguiente tabla enumera el tipo de nodo principal para los distintos ejes.
Eje |
Tipo de nodo principal |
---|---|
Cualquier eje distinto de un eje attribute:: o del eje namespace:: (es decir, un eje que puede incluir elementos) |
elemento |
atributo |
atributo |
espacio de nombres |
espacio de nombres |
El nombre especificado en una prueba de nombres puede ser de uno de los tres tipos: un asterisco (*), un QName o la expresión NCName:*.La siguiente tabla muestra ejemplos del modo en que trabaja cada uno de estos tipos de nombres junto con el eje especificado con el fin de localizar un conjunto de nodos concreto.
Nombre |
Valores devueltos |
Ejemplo |
---|---|---|
* (asterisco) |
Verdadero para cualquier nodo del tipo de nodo principal. |
ancestor::* selecciona todos los antecesores del nodo de contexto. attribute::* selecciona todos los atributos del nodo de contexto. namespace::* selecciona todos los espacios de nombres del nodo de contexto. |
QName |
Verdadero para cualquier nodo del tipo de nodo principal cuyo nombre expandido sea igual al nombre expandido que especifica el QName. |
child::para selecciona los nodos de elementos <para> que son secundarios del nodo de contexto.Si el nodo de contexto no tiene secundarios <para>, selecciona un conjunto de nodos vacío. |
NCName:* |
Verdadero para cualquier nodo del tipo principal cuyo nombre expandido tiene el identificador URI de espacio de nombres al que se expande el NCName, independientemente del nombre local. |
child::ns:* selecciona todos los nodos secundarios del elemento en el espacio de nombres con el prefijo ns. |
Comentarios
Cuando la prueba de nodo es un QName, XPath debe expandir primero el QName de acuerdo con las declaraciones de espacio de nombres de contexto presentes en el archivo XML.Este proceso de expansión es idéntico al proceso de expansión de los nombres de elementos de las etiquetas de apertura y cierre, salvo que no utiliza el espacio de nombres predeterminado declarado con xmlns.Si el QName no tiene un prefijo, XPath busca aquellos nodos cuyos nombres locales coincidan con el QName proporcionado y cuyo identificador URI de espacio de nombres sea nulo.Si el prefijo del QName no se corresponde con ninguna de las declaraciones de espacio de nombres de contexto presentes en el archivo, un QName provocará un error.
Cuando la prueba de nodo es NCName:*, XPath expande el NCName del mismo modo que expandiría el prefijo de un QName.Asimismo, un NCName:* provoca un error si la parte de NCName no se corresponde con ninguno de los prefijos contenidos en las declaraciones de espacio de nombres de contexto presentes en el archivo.