Dominando la Navegación XML con XPath: Tipos de Nodos y Sintaxis de Expresiones
Clasificado en Informática
Escrito el en
español con un tamaño de 8,28 KB
Modelo de Datos y Tipos de Nodos en XPath
Un documento XML puede representarse como un árbol dirigido, considerando, por ejemplo, los elementos como nodos y que un elemento es padre de los elementos que contiene. Pero en XPath no solo los elementos son nodos; en realidad, existen siete tipos fundamentales de nodos:
Tipos de Nodos Fundamentales
- Raíz (Root): Se identifica por
/. No se debe confundir el nodo raíz con el elemento raíz del documento. - Elemento: Cualquier elemento de un documento XML se convierte en un nodo elemento dentro del árbol. Cada elemento tiene su nodo padre. El nodo padre de cualquier elemento es, a su vez, un elemento, excepto el elemento raíz, cuyo padre es el nodo raíz. Los nodos elemento tienen a su vez hijos, que pueden ser nodos de cualquier tipo, excepto raíz.
- Atributo: Son como etiquetas añadidas a dicho nodo. Cada nodo atributo consta de un nombre y un valor (que es siempre una cadena).
- Texto: Referencia a todos los caracteres del documento que no están marcados con alguna etiqueta. Este no tiene hijos.
- Comentario
- Instrucción de procesamiento
- Espacio de nombres (Namespace)
Tokens Válidos en una Expresión XPath
Los siguientes son los tokens y símbolos permitidos para construir expresiones válidas en XPath:
- Paréntesis y Similares:
( ) { } [ ] - Navegación Relativa:
.: Elemento actual...: Elemento padre.
- Atributos y Separadores:
@: Atributo.*: Comodín (cualquier elemento o atributo).::: Separador de eje (axis).
- Otros Símbolos: La coma
, - Nombre de un Elemento
- Tipo de Nodo:
comment,text,processing-instruction,node - Operadores:
and,or,mod,div,*,/,//,|,+,-,=,!=,<,<=,>,>= - Nombres de Función.
- Nombre de Eje (Axis):
ancestor,ancestor-or-self,attribute,child,descendant,descendant-or-self,following,following-sibling,namespace,parent,preceding,preceding-sibling,self - Literales: Entre comillas dobles o simples (se pueden anidar alternadas).
- Números.
- Referencias a Variables:
$nombreVariable
Expresiones XPath Más Comunes
elemento- Elemento de nombre elemento.
/elemento- Elemento de nombre elemento ubicado en la raíz del documento.
e1/e2e2hijo directo dee1.e1//e2e2descendiente (hijo, nieto, bisnieto, etc.) del elementoe1.//elemento- Elemento de nombre elemento ubicado en cualquier nivel por debajo de la raíz del documento. (El operador
//indica "descendiente"). @atributo- Atributo de nombre atributo.
*- Cualquier elemento (todos los elementos).
@*- Cualquier atributo (todos los atributos).
.- Nodo actual.
..- Nodo padre.
Funciones Esenciales de XPath
Funciones que Devuelven Elementos por su Posición
position() = n- Elemento que se encuentra en la n-ésima posición.
Elemento[n]- Elemento que se encuentra en la n-ésima posición.
last()- El último elemento de un conjunto.
last() - i- El elemento contando i posiciones antes del último.
Funciones que Devuelven Nodos
name()- Nombre del nodo actual.
root()- El elemento raíz.
node()- Nodos descendientes del actual.
comment()- Comentarios.
processing-instruction()- Instrucciones de procesamiento.
Funciones de Agregado
count()- Conteo de elementos.
avg()- Media o promedio de valores.
max()- Valor máximo.
min()- Valor mínimo.
sum()- Suma de valores.
Funciones Numéricas
round()- Redondeo. Ejemplo:
round(3.14) = 3 abs()- Valor absoluto. Ejemplo:
abs(-7) = 7 floor()- Suelo (entero menor o igual). Ejemplo:
floor(7.3) = 7 ceiling()- Techo (entero mayor o igual). Ejemplo:
ceiling(7.3) = 8
Funciones de Cadena (String)
substring()- Subcadena. Ejemplo:
substring('Beatles', 1, 4) = 'Beat' starts-with()- Verifica si la cadena comienza por. Ejemplo:
starts-with('XML', 'X') = true contains()- Verifica si la cadena contiene. Ejemplo:
contains('XML', 'XM') = true string-length()- Longitud de la cadena. Ejemplo:
string-length('Beatles') = 7
Ejemplos Prácticos de Expresiones y Predicados
Uso del Descendiente (//)
El operador // indica "descendiente" (hijos, hijos de hijos, etc.).
Por ejemplo, la expresión:
//libroMuestra todos los nodos libro, incluidos sus hijos correspondientes. Si ejecutamos //autor, nos mostrará todos los nodos autor en el documento.
Selección de Atributos (@)
El símbolo @atributo selecciona el atributo.
Por ejemplo, si ejecutamos:
/biblioteca/libro/autor/@fechaNacimientoObtenemos los valores del atributo fechaNacimiento (ejemplo de resultado: fechaNacimiento="28/03/1936").
Navegación al Padre de un Atributo
Podemos seleccionar el elemento padre de un atributo utilizando /... Veamos la expresión:
/biblioteca/libro/autor/@fechaNacimiento/..Nos devuelve el nodo elemento autor que contiene dicho atributo:
<autor fechaNacimiento="28/03/1936">Mario Vargas Llosa</autor>Selección de Contenido de Texto (text())
La función text() selecciona el contenido de texto de un elemento.
Por ejemplo:
//autor/text()Predicados en XPath
Los predicados se utilizan para filtrar conjuntos de nodos y se escriben entre corchetes ([]).
Filtrado por Existencia de Atributo
El predicado [@atributo] selecciona los elementos que poseen el atributo especificado.
Por ejemplo:
//autor[@fechaNacimiento]Devuelve todos los nodos autor que tienen el atributo fechaNacimiento.
Ejemplo de Consulta Compleja
Para obtener el año en que se publicó la novela "La vida está en otra parte", se puede usar una combinación de predicados y navegación:
//titulo[.="La vida está en otra parte"]/../fechaPublicacion/@añoEsto devuelve el valor del atributo año (ejemplo de resultado: año=”1973”).