Saltar al contenido principal

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:

  1. Extraer todos los elementos <peso> (etiqueta incluida).
  2. Extraer las cantidades de todos los elementos <peso> (sin la etiqueta <peso>).
  3. Extraer el peso del último elemento.
  4. Extraer las distintas unidades en las que se han almacenado los pesos.
  5. Extraer el penúltimo codigo.
  6. Extraer el peso del elemento cuyo codigo sea AAA-111.
  7. Extraer el nombre de los productos que hayan puesto el peso en gramos.
  8. Extraer el codigo de los productos cuyo nombre sea Monitor.
  9. Extraer el código de los productos que pesen más de un cuarto de kilo.
Solución
  1. Extraer todos los elementos <peso> (etiqueta incluida).
/inventario/producto/peso
//peso
  1. Extraer las cantidades de todos los elementos <peso> (sin la etiqueta <peso>).
/inventario/producto/peso/text()
//peso/text()
  1. Extraer el peso del último elemento.
/inventario/producto[last()]/peso/text()
  1. Extraer las distintas unidades en las que se han almacenado los pesos.
distinct-values(/inventario/producto/peso/@unidad/string())
  1. Extraer el penúltimo codigo.
/inventario/producto[last()-1]/@codigo/string()
  1. Extraer el peso del elemento cuyo codigo sea AAA-111.
/inventario/producto[@codigo="AAA-111"]/peso/text()
  1. 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()
  1. Extraer el codigo de los productos cuyo nombre sea Monitor.
/inventario/producto[nombre/text()="Monitor"]/@codigo/string()
/inventario/producto[nombre="Monitor"]/@codigo/string()
  1. 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