Ejercicio 504
Consideremos el siguiente documento XML:
<?xml version="1.0" encoding="UTF-8"?>
<inventario>
<producto codigo="AAA-111">
<nombre>Teclado</nombre>
<peso unidad="g">480</peso>
</producto>
<producto codigo="ACD-981">
<nombre>Monitor</nombre>
<peso unidad="kg">1.8</peso>
</producto>
<producto codigo="DEZ-138">
<nombre>Raton</nombre>
<peso unidad="g">50</peso>
</producto>
</inventario>
Construye las expresiones XPath que permitan obtener los siguientes datos:
- Extraer todos los elementos
<peso>
(etiqueta incluida). - Extraer las cantidades de todos los elementos
<peso>
(sin la etiqueta<peso>
). - Extraer el peso del último elemento.
- Extraer las distintas unidades en las que se han almacenado los pesos.
- Extraer el penúltimo codigo.
- Extraer el peso del elemento cuyo codigo sea
AAA-111
. - Extraer el nombre de los productos que hayan puesto el peso en gramos.
- Extraer el codigo de los productos cuyo nombre sea
Monitor
. - Extraer el código de los productos que pesen más de un cuarto de kilo.
Solución
- Extraer todos los elementos
<peso>
(etiqueta incluida).
/inventario/producto/peso
//peso
- Extraer las cantidades de todos los elementos
<peso>
(sin la etiqueta<peso>
).
/inventario/producto/peso/text()
//peso/text()
- Extraer el peso del último elemento.
/inventario/producto[last()]/peso/text()
- Extraer las distintas unidades en las que se han almacenado los pesos.
distinct-values(/inventario/producto/peso/@unidad/string())
- Extraer el penúltimo codigo.
/inventario/producto[last()-1]/@codigo/string()
- Extraer el peso del elemento cuyo codigo sea
AAA-111
.
/inventario/producto[@codigo="AAA-111"]/peso/text()
- Extraer el nombre de los productos que hayan puesto el peso en gramos.
/inventario/producto[peso/@unidad="g"]/nombre/text()
/inventario/producto[peso[@unidad="g"]]/nombre/text()
- Extraer el codigo de los productos cuyo nombre sea
Monitor
.
/inventario/producto[nombre/text()="Monitor"]/@codigo/string()
/inventario/producto[nombre="Monitor"]/@codigo/string()
- Extraer el código de los productos que pesen más de un cuarto de kilo.
/inventario/producto[ (peso/@unidad="g" and peso>250) or (peso/@unidad="kg" and peso>0.25) ]/@codigo