Consultas XPath: ejercicios prácticos con soluciones para XML
Clasificado en Informática y Telecomunicaciones
Escrito el en
español con un tamaño de 7,05 KB
Actualizado el
Resumen
El documento propone 19 ejercicios prácticos de consultas XPath sobre estructuras XML, como conteo de nodos, selección de hijos, descendientes, ancestros y atributos. Cada ejercicio incluye su solución en expresión XPath, y algunos añaden un ejemplo de uso real. Al final se incluye una definición de tipo de documento (DTD) de un formulario HTML.
Puntos clave
- count(//alfa) cuenta todos los nodos alfa del documento, sin importar su nivel.
- /raíz/*[1] selecciona el primer hijo del nodo raíz y /raíz/*[last()] el último.
- //@attr1 devuelve los valores de todos los atributos attr1 del documento.
- //*[@attr2>5]/.. obtiene el padre de los elementos con attr2 numérico mayor que 5.
- count(//gamma/alfa | //gamma/beta) cuenta el total de alfa o beta hijos de gamma sin duplicados.
- count(//*[count(*)=0]) cuenta los elementos hoja, es decir, los que no tienen hijos.
- La DTD del final define la estructura de un formulario con elementos html, head, body, form, input, select y textarea.
Resumen generado con IA a partir del documento. Ponte a prueba
Introducción a las Consultas XPath
Este documento presenta una serie de ejercicios prácticos diseñados para afianzar el conocimiento y la aplicación de expresiones XPath en la manipulación y consulta de estructuras de documentos XML. Cada ejercicio plantea un problema específico de selección o conteo de nodos y atributos, seguido de su correspondiente solución en XPath, y se complementa con un ejemplo de utilidad para contextualizar su aplicación en escenarios reales.
Ejercicios Propuestos de XPath
Ejercicio 01: Conteo de Nodos por Tipo
Contar la ocurrencia de cada tipo de nodo:
alfa,beta,gamma,delta,épsilonytheta.Ejercicio 02: Nodos Hijos Directos del Raíz
Determinar el número de nodos
alfa,beta,gamma,delta,épsilonythetaque son hijos directos del elemento raíz.Ejercicio 03: Nodos Descendientes de un Elemento Delta
Contar el número de nodos
alfa,beta,gamma,épsilonythetaque son descendientes de un elementodelta.Ejercicio 04: Mostrar Valores de Atributos Específicos
Mostrar el valor de todos los atributos
attr1presentes en el documento.Ejercicio 05: Primer Hijo del Nodo Raíz
Identificar y mostrar el primer hijo del nodo raíz.
Ejercicio 06: Último Hijo del Nodo Raíz
Identificar y mostrar el último hijo del nodo raíz.
Ejercicio 07: Penúltimo Hijo del Nodo Raíz
Identificar y mostrar el penúltimo hijo del nodo raíz.
Ejercicio 08: Hijos del Nodo Raíz a partir del Segundo
Mostrar todos los hijos del nodo raíz, excluyendo el primero.
Ejercicio 09: Elemento Padre por Atributo Condicional
Mostrar el nombre del elemento padre de cualquier nodo que posea un atributo
attr2con un valor numérico superior a 5.Ejemplo de utilidad: Localizar la biblioteca que contiene un libro con un ISBN específico.
Ejercicio 10: Elemento por Contenido Textual
Mostrar el nombre del elemento cuyo contenido textual exacto sea "Contenido 3".
Ejemplo de utilidad: Seleccionar un libro específico por su título.
Ejercicio 11: Conteo Condicional de Nodos Hijos
Contar el número de elementos
gammaque son hijos directos de un elementodeltaque, a su vez, posee el atributoattr2.Ejemplo de utilidad: Listar los títulos de todos los libros con un precio superior a 10 euros.
Ejercicio 12: Conteo Total de Atributos en Hijos del Raíz
Contar el número total de atributos presentes en todos los hijos directos del elemento raíz.
Ejercicio 13: Conteo de Hijos Directos del Raíz
Contar el número de hijos directos que tiene el elemento raíz.
Ejercicio 14: Conteo de Elementos Hoja
Contar el número de elementos hoja (aquellos sin hijos) en el documento.
Ejercicio 15: Conteo de Elementos con Atributos
Contar el número de elementos que poseen al menos un atributo.
Ejercicio 16: Conteo de Nodos Alfa o Beta Hijos de Gamma
Contar el número total de elementos
alfaobetaque son hijos directos de un elementogamma. (La cuenta debe ser total, no la suma de conteos individuales).Ejercicio 17: Conteo de Ancestros por Contenido
Contar el número de ancestros del elemento que contiene el texto "Contenido 1".
Ejercicio 18: Conteo de Descendientes del Penúltimo Hijo
Contar el número de descendientes del penúltimo hijo del nodo raíz.
Ejercicio 19: Conteo de Hermanos del Segundo Hijo
Contar el número de hermanos (elementos del mismo nivel) del segundo hijo del nodo raíz.
Soluciones XPath Detalladas
Solución 01
count(//alfa) count(//beta) count(//gamma) count(//delta) count(//épsilon) count(//theta)Solución 02
count(/raíz/alfa) count(/raíz/beta) count(/raíz/gamma) count(/raíz/delta) count(/raíz/épsilon) count(/raíz/theta)Solución 03
count(//delta//alfa) count(//delta//beta) count(//delta//gamma) count(//delta//épsilon) count(//delta//theta)Solución 04
//@attr1Solución 05
/raíz/*[1]Solución 06
/raíz/*[last()]Solución 07
/raíz/*[last()-1]Solución 08
/raíz/*[position()>1]Solución 09
//*[@attr2>5]/..Solución 10
//*[text()="Contenido 3"]Solución 11
count(//delta[@attr2]/gamma)Solución 12
count(/raíz/*/attribute::*)Solución 13
count(/raíz/*)Solución 14
count(//*[count(*)=0])Solución 15
count(//*[@*])Solución 16
count(//gamma/alfa | //gamma/beta)Solución 17
count(//*[text()='Contenido 1']/ancestor::*)Solución 18
count(/raíz/*[last()-1]/descendant::*)Solución 19
count(/raíz/*[2]/preceding-sibling::* | /raíz/*[2]/following-sibling::*)
Definición de Tipo de Documento (DTD)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html [
<!ELEMENT html (head, body)>
<!ELEMENT head (title)>
<!ELEMENT title (#PCDATA)>
<!ELEMENT body (form)>
<!ELEMENT form (#PCDATA | input | fieldset | select | textarea)*>
<!ATTLIST form
action CDATA #IMPLIED
method (get | post | set) "get"
>
<!ELEMENT input (#PCDATA)>
<!ATTLIST input
type (text|submit|password|reset|radio|checkbox|button|color|
date|time|url|email|file|number|range) #REQUIRED
name CDATA #IMPLIED
value CDATA #IMPLIED
min CDATA #IMPLIED
max CDATA #IMPLIED
onclick CDATA #IMPLIED
>
<!ELEMENT select (option+)>
<!ATTLIST select name CDATA #IMPLIED>
<!ELEMENT option (#PCDATA)>
<!ATTLIST option value CDATA #IMPLIED>
<!ELEMENT fieldset (#PCDATA | legend | select | input | textarea | fieldset)*>
<!ELEMENT legend (#PCDATA)>
<!ELEMENT textarea (#PCDATA)>
<!ATTLIST textarea
name CDATA #IMPLIED
rows CDATA #IMPLIED
cols CDATA #IMPLIED
>
]>Preguntas frecuentes
¿Cómo se selecciona el último hijo del nodo raíz en XPath?
Se usa la expresión /raíz/*[last()], que devuelve el último elemento hijo directo del nodo raíz. Para el penúltimo se emplea /raíz/*[last()-1].
¿Qué devuelve la expresión //@attr1?
Devuelve los valores de todos los atributos llamados attr1 presentes en el documento, sin importar en qué elemento aparezcan.
¿Cómo se cuentan los elementos hoja de un documento XML?
Con la expresión count(//*[count(*)=0]), que cuenta los elementos que no tienen ningún hijo.
Ponte a prueba
Tarjetas de repaso
Pulsa una tarjeta para ver la respuesta.
Test
Preguntas generadas con IA a partir del documento: comprueba las respuestas con el texto.