Dominando Consultas XPath: Ejercicios Prácticos y Soluciones para Estructuras XML
Enviado por Chuletator online y clasificado en Matemáticas
Escrito el en español con un tamaño de 7,05 KB
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
,épsilon
ytheta
.Ejercicio 02: Nodos Hijos Directos del Raíz
Determinar el número de nodos
alfa
,beta
,gamma
,delta
,épsilon
ytheta
que son hijos directos del elemento raíz.Ejercicio 03: Nodos Descendientes de un Elemento Delta
Contar el número de nodos
alfa
,beta
,gamma
,épsilon
ytheta
que son descendientes de un elementodelta
.Ejercicio 04: Mostrar Valores de Atributos Específicos
Mostrar el valor de todos los atributos
attr1
presentes 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
attr2
con 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
gamma
que son hijos directos de un elementodelta
que, 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
alfa
obeta
que 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
//@attr1
Solució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
>
]>