Está en la página 1de 32

Apéndice de la Unidad 5:

Ejemplos de XPath
XPATH

Vamos a utilizar siguiente documento XML para nuestros ejemplos:


<?xml version="1.0" encoding="ISO-8859-1"?>
<Facturas>
<Factura Numero="0000-00001234" Fecha="25-05-2007">
<Cliente>
<Nombre>Prudencia Saviano</Nombre>
<IVA Condicion="Responsasble Inscripto" Porcentaje="21"/>
</Cliente>
<Detalle>
<Articulo Descripcion="Tenaza" Precio="20"/>
<Articulo Descripcion="Alicate" Precio="15"/>
</Detalle>
</Factura>
<Factura Numero="0000-00001235" Fecha="26-05-2007">
<Cliente>
<Nombre>Eusebio Sanabria</Nombre>
<Direccion Calle="Urquiza 2250" Localidad="Bernal"/>
<IVA Condicion="Responsasble Inscripto" Porcentaje="21"/>
</Cliente>
<Detalle>
<Articulo Descripcion="Pinza" Precio="25"/>
<Articulo Descripcion="Destornillador" Precio="12"/>
<Articulo Descripcion="Sierra" Precio="22"/>
</Detalle>
</Factura>
<Factura Numero="0000-00001236" Fecha="26-05-2007">
<Cliente>
<Nombre>Prudencia Saviano</Nombre>
<Direccion Calle="Medrano 511" Localidad="Buenos Aires"/>
<IVA Condicion="Responsasble Inscripto" Porcentaje="21"/>
</Cliente>
<Detalle>
<Articulo Descripcion="Martillo" Precio="15"/>
</Detalle>
</Factura>
<Factura Numero="0000-00001237" Fecha="25-05-2007">
<Cliente>
<Nombre>Toribio Colinas</Nombre>
<Direccion Calle="Maipú 326" Localidad="Bernal"/>
<IVA Condicion="Excento" Porcentaje="0"/>
</Cliente>
<Detalle>
<Articulo Descripcion="Tenaza" Precio="20"/>
<Articulo Descripcion="Destornillador" Precio="9"/>
</Detalle>
</Factura>
</Facturas>

Convengamos que vamos resaltar los nodos seleccionados con amarillo, y en


el caso de los elementos, vamos a indicar solamente el tag de apertura.

Empecemos con algo sumamente sencillo, lo elementos hijos del nodo raíz.
Utilizaremos el carácter comodín (*), como si no supiéramos el nombre del
elemento raíz:
/*

UNIDAD 5
Curso de HL7 Abierto a la comunidad Iberoamericana
Asociación Civil HL7 Argentina
2
<?xml version="1.0" encoding="ISO-8859-1"?>
<Facturas>
<Factura Numero="0000-00001234" Fecha="25-05-2007">
<Cliente>
<Nombre>Prudencia Saviano</Nombre>
<IVA Condicion="Responsasble Inscripto" Porcentaje="21"/>
</Cliente>
<Detalle>
<Articulo Descripcion="Tenaza" Precio="20"/>
<Articulo Descripcion="Alicate" Precio="15"/>
</Detalle>
</Factura>
<Factura Numero="0000-00001235" Fecha="26-05-2007">
<Cliente>
<Nombre>Eusebio Sanabria</Nombre>
<Direccion Calle="Urquiza 2250" Localidad="Bernal"/>
<IVA Condicion="Responsasble Inscripto" Porcentaje="21"/>
</Cliente>
<Detalle>
<Articulo Descripcion="Pinza" Precio="25"/>
<Articulo Descripcion="Destornillador" Precio="12"/>
<Articulo Descripcion="Sierra" Precio="22"/>
</Detalle>
</Factura>
<Factura Numero="0000-00001236" Fecha="26-05-2007">
<Cliente>
<Nombre>Prudencia Saviano</Nombre>
<Direccion Calle="Medrano 511" Localidad="Buenos Aires"/>
<IVA Condicion="Responsasble Inscripto" Porcentaje="21"/>
</Cliente>
<Detalle>
<Articulo Descripcion="Martillo" Precio="15"/>
</Detalle>
</Factura>
<Factura Numero="0000-00001237" Fecha="25-05-2007">
<Cliente>
<Nombre>Toribio Colinas</Nombre>
<Direccion Calle="Maipú 326" Localidad="Bernal"/>
<IVA Condicion="Excento" Porcentaje="0"/>
</Cliente>
<Detalle>
<Articulo Descripcion="Tenaza" Precio="20"/>
<Articulo Descripcion="Destornillador" Precio="9"/>
</Detalle>
</Factura>
</Facturas>

Para este documento, obtendríamos el mismo resultado nombrando


específicamente el elemento raíz:
/Facturas

Ahora seleccionaremos todos los elementos hijos del elemento raíz, si importar
el nombre de éste:
/*/*

<?xml version="1.0" encoding="ISO-8859-1"?>


<Facturas>
<Factura Numero="0000-00001234" Fecha="25-05-2007">
<Cliente>
<Nombre>Prudencia Saviano</Nombre>
<IVA Condicion="Responsasble Inscripto" Porcentaje="21"/>
</Cliente>
<Detalle>
<Articulo Descripcion="Tenaza" Precio="20"/>
UNIDAD 5
Curso de HL7 Abierto a la comunidad Iberoamericana
Asociación Civil HL7 Argentina
3
<Articulo Descripcion="Alicate" Precio="15"/>
</Detalle>
</Factura>
<Factura Numero="0000-00001235" Fecha="26-05-2007">
<Cliente>
<Nombre>Eusebio Sanabria</Nombre>
<Direccion Calle="Urquiza 2250" Localidad="Bernal"/>
<IVA Condicion="Responsasble Inscripto" Porcentaje="21"/>
</Cliente>
<Detalle>
<Articulo Descripcion="Pinza" Precio="25"/>
<Articulo Descripcion="Destornillador" Precio="12"/>
<Articulo Descripcion="Sierra" Precio="22"/>
</Detalle>
</Factura>
<Factura Numero="0000-00001236" Fecha="26-05-2007">
<Cliente>
<Nombre>Prudencia Saviano</Nombre>
<Direccion Calle="Medrano 511" Localidad="Buenos Aires"/>
<IVA Condicion="Responsasble Inscripto" Porcentaje="21"/>
</Cliente>
<Detalle>
<Articulo Descripcion="Martillo" Precio="15"/>
</Detalle>
</Factura>
<Factura Numero="0000-00001237" Fecha="25-05-2007">
<Cliente>
<Nombre>Toribio Colinas</Nombre>
<Direccion Calle="Maipú 326" Localidad="Bernal"/>
<IVA Condicion="Excento" Porcentaje="0"/>
</Cliente>
<Detalle>
<Articulo Descripcion="Tenaza" Precio="20"/>
<Articulo Descripcion="Destornillador" Precio="9"/>
</Detalle>
</Factura>
</Facturas>

Vamos a seleccionar todos los elementos del documento, a cualquier nivel


de profundidad en la jerarquía. Utilizamos el eje descendant-or-self, a partir
del nodo raíz:
//*

<?xml version="1.0" encoding="ISO-8859-1"?>


<Facturas>
<Factura Numero="0000-00001234" Fecha="25-05-2007">
<Cliente>
<Nombre>Prudencia Saviano</Nombre>
<IVA Condicion="Responsasble Inscripto" Porcentaje="21"/>
</Cliente>
<Detalle>
<Articulo Descripcion="Tenaza" Precio="20"/>
<Articulo Descripcion="Alicate" Precio="15"/>
</Detalle>
</Factura>
<Factura Numero="0000-00001235" Fecha="26-05-2007">
<Cliente>
<Nombre>Eusebio Sanabria</Nombre>
<Direccion Calle="Urquiza 2250" Localidad="Bernal"/>
<IVA Condicion="Responsasble Inscripto" Porcentaje="21"/>
</Cliente>
<Detalle>
<Articulo Descripcion="Pinza" Precio="25"/>
<Articulo Descripcion="Destornillador" Precio="12"/>
<Articulo Descripcion="Sierra" Precio="22"/>

UNIDAD 5
Curso de HL7 Abierto a la comunidad Iberoamericana
Asociación Civil HL7 Argentina
4
</Detalle>
</Factura>
<Factura Numero="0000-00001236" Fecha="26-05-2007">
<Cliente>
<Nombre>Prudencia Saviano</Nombre>
<Direccion Calle="Medrano 511" Localidad="Buenos Aires"/>
<IVA Condicion="Responsasble Inscripto" Porcentaje="21"/>
</Cliente>
<Detalle>
<Articulo Descripcion="Martillo" Precio="15"/>
</Detalle>
</Factura>
<Factura Numero="0000-00001237" Fecha="25-05-2007">
<Cliente>
<Nombre>Toribio Colinas</Nombre>
<Direccion Calle="Maipú 326" Localidad="Bernal"/>
<IVA Condicion="Excento" Porcentaje="0"/>
</Cliente>
<Detalle>
<Articulo Descripcion="Tenaza" Precio="20"/>
<Articulo Descripcion="Destornillador" Precio="9"/>
</Detalle>
</Factura>
</Facturas>

Ahora utilizaremos más pasos. La barra (/) separa pasos y el eje que se asume
por omisión es child.
Seleccionamos todos los elementos hijos de los elementos <Factura>. El
primer paso selecciona el elemento raíz, el segundo selecciona de entre sus
hijos, los elementos <Factura>, y el último, de entre los hijos de estos,
selecciona todos los elementos:
/Facturas/Factura/*

<?xml version="1.0" encoding="ISO-8859-1"?>


<Facturas>
<Factura Numero="0000-00001234" Fecha="25-05-2007">
<Cliente>
<Nombre>Prudencia Saviano</Nombre>
<IVA Condicion="Responsasble Inscripto" Porcentaje="21"/>
</Cliente>
<Detalle>
<Articulo Descripcion="Tenaza" Precio="20"/>
<Articulo Descripcion="Alicate" Precio="15"/>
</Detalle>
</Factura>
<Factura Numero="0000-00001235" Fecha="26-05-2007">
<Cliente>
<Nombre>Eusebio Sanabria</Nombre>
<Direccion Calle="Urquiza 2250" Localidad="Bernal"/>
<IVA Condicion="Responsasble Inscripto" Porcentaje="21"/>
</Cliente>
<Detalle>
<Articulo Descripcion="Pinza" Precio="25"/>
<Articulo Descripcion="Destornillador" Precio="12"/>
<Articulo Descripcion="Sierra" Precio="22"/>
</Detalle>
</Factura>
<Factura Numero="0000-00001236" Fecha="26-05-2007">
<Cliente>
<Nombre>Prudencia Saviano</Nombre>
<Direccion Calle="Medrano 511" Localidad="Buenos Aires"/>
<IVA Condicion="Responsasble Inscripto" Porcentaje="21"/>
</Cliente>
<Detalle>
UNIDAD 5
Curso de HL7 Abierto a la comunidad Iberoamericana
Asociación Civil HL7 Argentina
5
<Articulo Descripcion="Martillo" Precio="15"/>
</Detalle>
</Factura>
<Factura Numero="0000-00001237" Fecha="25-05-2007">
<Cliente>
<Nombre>Toribio Colinas</Nombre>
<Direccion Calle="Maipú 326" Localidad="Bernal"/>
<IVA Condicion="Excento" Porcentaje="0"/>
</Cliente>
<Detalle>
<Articulo Descripcion="Tenaza" Precio="20"/>
<Articulo Descripcion="Destornillador" Precio="9"/>
</Detalle>
</Factura>
</Facturas>

A continuación, haremos algo similar, pero seleccionaremos todos elementos


descendientes de los elementos <Factura>, por lo que en el último paso
utilizaremos el eje descendant-or-self:
/Facturas/Factura//*

<?xml version="1.0" encoding="ISO-8859-1"?>


<Facturas>
<Factura Numero="0000-00001234" Fecha="25-05-2007">
<Cliente>
<Nombre>Prudencia Saviano</Nombre>
<IVA Condicion="Responsasble Inscripto" Porcentaje="21"/>
</Cliente>
<Detalle>
<Articulo Descripcion="Tenaza" Precio="20"/>
<Articulo Descripcion="Alicate" Precio="15"/>
</Detalle>
</Factura>
<Factura Numero="0000-00001235" Fecha="26-05-2007">
<Cliente>
<Nombre>Eusebio Sanabria</Nombre>
<Direccion Calle="Urquiza 2250" Localidad="Bernal"/>
<IVA Condicion="Responsasble Inscripto" Porcentaje="21"/>
</Cliente>
<Detalle>
<Articulo Descripcion="Pinza" Precio="25"/>
<Articulo Descripcion="Destornillador" Precio="12"/>
<Articulo Descripcion="Sierra" Precio="22"/>
</Detalle>
</Factura>
<Factura Numero="0000-00001236" Fecha="26-05-2007">
<Cliente>
<Nombre>Prudencia Saviano</Nombre>
<Direccion Calle="Medrano 511" Localidad="Buenos Aires"/>
<IVA Condicion="Responsasble Inscripto" Porcentaje="21"/>
</Cliente>
<Detalle>
<Articulo Descripcion="Martillo" Precio="15"/>
</Detalle>
</Factura>
<Factura Numero="0000-00001237" Fecha="25-05-2007">
<Cliente>
<Nombre>Toribio Colinas</Nombre>
<Direccion Calle="Maipú 326" Localidad="Bernal"/>
<IVA Condicion="Excento" Porcentaje="0"/>
</Cliente>
<Detalle>
<Articulo Descripcion="Tenaza" Precio="20"/>
<Articulo Descripcion="Destornillador" Precio="9"/>
</Detalle>

UNIDAD 5
Curso de HL7 Abierto a la comunidad Iberoamericana
Asociación Civil HL7 Argentina
6
</Factura>
</Facturas>

En el siguiente caso, seleccionaremos los atributos hijos de los elementos


<Factura>:
/Facturas/Factura/@*

<?xml version="1.0" encoding="ISO-8859-1"?>


<Facturas>
<Factura Numero="0000-00001234" Fecha="25-05-2007">
<Cliente>
<Nombre>Prudencia Saviano</Nombre>
<IVA Condicion="Responsasble Inscripto" Porcentaje="21"/>
</Cliente>
<Detalle>
<Articulo Descripcion="Tenaza" Precio="20"/>
<Articulo Descripcion="Alicate" Precio="15"/>
</Detalle>
</Factura>
<Factura Numero="0000-00001235" Fecha="26-05-2007">
<Cliente>
<Nombre>Eusebio Sanabria</Nombre>
<Direccion Calle="Urquiza 2250" Localidad="Bernal"/>
<IVA Condicion="Responsasble Inscripto" Porcentaje="21"/>
</Cliente>
<Detalle>
<Articulo Descripcion="Pinza" Precio="25"/>
<Articulo Descripcion="Destornillador" Precio="12"/>
<Articulo Descripcion="Sierra" Precio="22"/>
</Detalle>
</Factura>
<Factura Numero="0000-00001236" Fecha="26-05-2007">
<Cliente>
<Nombre>Prudencia Saviano</Nombre>
<Direccion Calle="Medrano 511" Localidad="Buenos Aires"/>
<IVA Condicion="Responsasble Inscripto" Porcentaje="21"/>
</Cliente>
<Detalle>
<Articulo Descripcion="Martillo" Precio="15"/>
</Detalle>
</Factura>
<Factura Numero="0000-00001237" Fecha="25-05-2007">
<Cliente>
<Nombre>Toribio Colinas</Nombre>
<Direccion Calle="Maipú 326" Localidad="Bernal"/>
<IVA Condicion="Excento" Porcentaje="0"/>
</Cliente>
<Detalle>
<Articulo Descripcion="Tenaza" Precio="20"/>
<Articulo Descripcion="Destornillador" Precio="9"/>
</Detalle>
</Factura>
</Facturas>

La siguiente expresión selecciona todos los atributos que haya dentro de los
elementos <Cliente>, a cualquier nivel:
/Facturas/Factura/Cliente//@*

<?xml version="1.0" encoding="ISO-8859-1"?>


<Facturas>
<Factura Numero="0000-00001234" Fecha="25-05-2007">
<Cliente>
<Nombre>Prudencia Saviano</Nombre>

UNIDAD 5
Curso de HL7 Abierto a la comunidad Iberoamericana
Asociación Civil HL7 Argentina
7
<IVA Condicion="Responsasble Inscripto" Porcentaje="21"/>
</Cliente>
<Detalle>
<Articulo Descripcion="Tenaza" Precio="20"/>
<Articulo Descripcion="Alicate" Precio="15"/>
</Detalle>
</Factura>
<Factura Numero="0000-00001235" Fecha="26-05-2007">
<Cliente>
<Nombre>Eusebio Sanabria</Nombre>
<Direccion Calle="Urquiza 2250" Localidad="Bernal"/>
<IVA Condicion="Responsasble Inscripto" Porcentaje="21"/>
</Cliente>
<Detalle>
<Articulo Descripcion="Pinza" Precio="25"/>
<Articulo Descripcion="Destornillador" Precio="12"/>
<Articulo Descripcion="Sierra" Precio="22"/>
</Detalle>
</Factura>
<Factura Numero="0000-00001236" Fecha="26-05-2007">
<Cliente>
<Nombre>Prudencia Saviano</Nombre>
<Direccion Calle="Medrano 511" Localidad="Buenos Aires"/>
<IVA Condicion="Responsasble Inscripto" Porcentaje="21"/>
</Cliente>
<Detalle>
<Articulo Descripcion="Martillo" Precio="15"/>
</Detalle>
</Factura>
<Factura Numero="0000-00001237" Fecha="25-05-2007">
<Cliente>
<Nombre>Toribio Colinas</Nombre>
<Direccion Calle="Maipú 326" Localidad="Bernal"/>
<IVA Condicion="Excento" Porcentaje="0"/>
</Cliente>
<Detalle>
<Articulo Descripcion="Tenaza" Precio="20"/>
<Articulo Descripcion="Destornillador" Precio="9"/>
</Detalle>
</Factura>
</Facturas>

Todos los atributos Precio del documento:


//@Precio

<?xml version="1.0" encoding="ISO-8859-1"?>


<Facturas>
<Factura Numero="0000-00001234" Fecha="25-05-2007">
<Cliente>
<Nombre>Prudencia Saviano</Nombre>
<IVA Condicion="Responsasble Inscripto" Porcentaje="21"/>
</Cliente>
<Detalle>
<Articulo Descripcion="Tenaza" Precio="20"/>
<Articulo Descripcion="Alicate" Precio="15"/>
</Detalle>
</Factura>
<Factura Numero="0000-00001235" Fecha="26-05-2007">
<Cliente>
<Nombre>Eusebio Sanabria</Nombre>
<Direccion Calle="Urquiza 2250" Localidad="Bernal"/>
<IVA Condicion="Responsasble Inscripto" Porcentaje="21"/>
</Cliente>
<Detalle>
<Articulo Descripcion="Pinza" Precio="25"/>
<Articulo Descripcion="Destornillador" Precio="12"/>

UNIDAD 5
Curso de HL7 Abierto a la comunidad Iberoamericana
Asociación Civil HL7 Argentina
8
<Articulo Descripcion="Sierra" Precio="22"/>
</Detalle>
</Factura>
<Factura Numero="0000-00001236" Fecha="26-05-2007">
<Cliente>
<Nombre>Prudencia Saviano</Nombre>
<Direccion Calle="Medrano 511" Localidad="Buenos Aires"/>
<IVA Condicion="Responsasble Inscripto" Porcentaje="21"/>
</Cliente>
<Detalle>
<Articulo Descripcion="Martillo" Precio="15"/>
</Detalle>
</Factura>
<Factura Numero="0000-00001237" Fecha="25-05-2007">
<Cliente>
<Nombre>Toribio Colinas</Nombre>
<Direccion Calle="Maipú 326" Localidad="Bernal"/>
<IVA Condicion="Excento" Porcentaje="0"/>
</Cliente>
<Detalle>
<Articulo Descripcion="Tenaza" Precio="20"/>
<Articulo Descripcion="Destornillador" Precio="9"/>
</Detalle>
</Factura>
</Facturas>

El elemento <Nombre> de cada cliente, utilizando los nombres de los


elementos y la ruta específica, sin utilizar caracteres comodines ni el eje
descendant-or-self. Es preferible escribir la expresión de la forma más explícita
y restrictiva posible, porque así el trabajo de selección es más eficiente.
/Facturas/Factura/Cliente/Nombre

<?xml version="1.0" encoding="ISO-8859-1"?>


<Facturas>
<Factura Numero="0000-00001234" Fecha="25-05-2007">
<Cliente>
<Nombre>Prudencia Saviano</Nombre>
<IVA Condicion="Responsasble Inscripto" Porcentaje="21"/>
</Cliente>
<Detalle>
<Articulo Descripcion="Tenaza" Precio="20"/>
<Articulo Descripcion="Alicate" Precio="15"/>
</Detalle>
</Factura>
<Factura Numero="0000-00001235" Fecha="26-05-2007">
<Cliente>
<Nombre>Eusebio Sanabria</Nombre>
<Direccion Calle="Urquiza 2250" Localidad="Bernal"/>
<IVA Condicion="Responsasble Inscripto" Porcentaje="21"/>
</Cliente>
<Detalle>
<Articulo Descripcion="Pinza" Precio="25"/>
<Articulo Descripcion="Destornillador" Precio="12"/>
<Articulo Descripcion="Sierra" Precio="22"/>
</Detalle>
</Factura>
<Factura Numero="0000-00001236" Fecha="26-05-2007">
<Cliente>
<Nombre>Prudencia Saviano</Nombre>
<Direccion Calle="Medrano 511" Localidad="Buenos Aires"/>
<IVA Condicion="Responsasble Inscripto" Porcentaje="21"/>
</Cliente>
<Detalle>
<Articulo Descripcion="Martillo" Precio="15"/>
</Detalle>
UNIDAD 5
Curso de HL7 Abierto a la comunidad Iberoamericana
Asociación Civil HL7 Argentina
9
</Factura>
<Factura Numero="0000-00001237" Fecha="25-05-2007">
<Cliente>
<Nombre>Toribio Colinas</Nombre>
<Direccion Calle="Maipú 326" Localidad="Bernal"/>
<IVA Condicion="Excento" Porcentaje="0"/>
</Cliente>
<Detalle>
<Articulo Descripcion="Tenaza" Precio="20"/>
<Articulo Descripcion="Destornillador" Precio="9"/>
</Detalle>
</Factura>
</Facturas>

Ahora su valor textual. El nodo de texto en hijo del elemento:


/Facturas/Factura/Cliente/Nombre/text()

<?xml version="1.0" encoding="ISO-8859-1"?>


<Facturas>
<Factura Numero="0000-00001234" Fecha="25-05-2007">
<Cliente>
<Nombre>Prudencia Saviano</Nombre>
<IVA Condicion="Responsasble Inscripto" Porcentaje="21"/>
</Cliente>
<Detalle>
<Articulo Descripcion="Tenaza" Precio="20"/>
<Articulo Descripcion="Alicate" Precio="15"/>
</Detalle>
</Factura>
<Factura Numero="0000-00001235" Fecha="26-05-2007">
<Cliente>
<Nombre>Eusebio Sanabria</Nombre>
<Direccion Calle="Urquiza 2250" Localidad="Bernal"/>
<IVA Condicion="Responsasble Inscripto" Porcentaje="21"/>
</Cliente>
<Detalle>
<Articulo Descripcion="Pinza" Precio="25"/>
<Articulo Descripcion="Destornillador" Precio="12"/>
<Articulo Descripcion="Sierra" Precio="22"/>
</Detalle>
</Factura>
<Factura Numero="0000-00001236" Fecha="26-05-2007">
<Cliente>
<Nombre>Prudencia Saviano</Nombre>
<Direccion Calle="Medrano 511" Localidad="Buenos Aires"/>
<IVA Condicion="Responsasble Inscripto" Porcentaje="21"/>
</Cliente>
<Detalle>
<Articulo Descripcion="Martillo" Precio="15"/>
</Detalle>
</Factura>
<Factura Numero="0000-00001237" Fecha="25-05-2007">
<Cliente>
<Nombre>Toribio Colinas</Nombre>
<Direccion Calle="Maipú 326" Localidad="Bernal"/>
<IVA Condicion="Excento" Porcentaje="0"/>
</Cliente>
<Detalle>
<Articulo Descripcion="Tenaza" Precio="20"/>
<Articulo Descripcion="Destornillador" Precio="9"/>
</Detalle>
</Factura>
</Facturas>

Introduzcamos predicados. Empezamos por seleccionar la tercer factura:

UNIDAD 5
Curso de HL7 Abierto a la comunidad Iberoamericana
Asociación Civil HL7 Argentina
10
/Facturas/Factura[3]

<?xml version="1.0" encoding="ISO-8859-1"?>


<Facturas>
<Factura Numero="0000-00001234" Fecha="25-05-2007">
<Cliente>
<Nombre>Prudencia Saviano</Nombre>
<IVA Condicion="Responsasble Inscripto" Porcentaje="21"/>
</Cliente>
<Detalle>
<Articulo Descripcion="Tenaza" Precio="20"/>
<Articulo Descripcion="Alicate" Precio="15"/>
</Detalle>
</Factura>
<Factura Numero="0000-00001235" Fecha="26-05-2007">
<Cliente>
<Nombre>Eusebio Sanabria</Nombre>
<Direccion Calle="Urquiza 2250" Localidad="Bernal"/>
<IVA Condicion="Responsasble Inscripto" Porcentaje="21"/>
</Cliente>
<Detalle>
<Articulo Descripcion="Pinza" Precio="25"/>
<Articulo Descripcion="Destornillador" Precio="12"/>
<Articulo Descripcion="Sierra" Precio="22"/>
</Detalle>
</Factura>
<Factura Numero="0000-00001236" Fecha="26-05-2007">
<Cliente>
<Nombre>Prudencia Saviano</Nombre>
<Direccion Calle="Medrano 511" Localidad="Buenos Aires"/>
<IVA Condicion="Responsasble Inscripto" Porcentaje="21"/>
</Cliente>
<Detalle>
<Articulo Descripcion="Martillo" Precio="15"/>
</Detalle>
</Factura>
<Factura Numero="0000-00001237" Fecha="25-05-2007">
<Cliente>
<Nombre>Toribio Colinas</Nombre>
<Direccion Calle="Maipú 326" Localidad="Bernal"/>
<IVA Condicion="Excento" Porcentaje="0"/>
</Cliente>
<Detalle>
<Articulo Descripcion="Tenaza" Precio="20"/>
<Articulo Descripcion="Destornillador" Precio="9"/>
</Detalle>
</Factura>
</Facturas>

El mismo resultado habría dado la siguiente expresión que utiliza la función


position():

/Facturas/Factura[position()=3]

Seleccionemos ahora la última factura, no importa cuantas haya:


/Facturas/Factura[position()=last()]

<?xml version="1.0" encoding="ISO-8859-1"?>


<Facturas>
<Factura Numero="0000-00001234" Fecha="25-05-2007">
<Cliente>
<Nombre>Prudencia Saviano</Nombre>
<IVA Condicion="Responsasble Inscripto" Porcentaje="21"/>
</Cliente>
<Detalle>
UNIDAD 5
Curso de HL7 Abierto a la comunidad Iberoamericana
Asociación Civil HL7 Argentina
11
<Articulo Descripcion="Tenaza" Precio="20"/>
<Articulo Descripcion="Alicate" Precio="15"/>
</Detalle>
</Factura>
<Factura Numero="0000-00001235" Fecha="26-05-2007">
<Cliente>
<Nombre>Eusebio Sanabria</Nombre>
<Direccion Calle="Urquiza 2250" Localidad="Bernal"/>
<IVA Condicion="Responsasble Inscripto" Porcentaje="21"/>
</Cliente>
<Detalle>
<Articulo Descripcion="Pinza" Precio="25"/>
<Articulo Descripcion="Destornillador" Precio="12"/>
<Articulo Descripcion="Sierra" Precio="22"/>
</Detalle>
</Factura>
<Factura Numero="0000-00001236" Fecha="26-05-2007">
<Cliente>
<Nombre>Prudencia Saviano</Nombre>
<Direccion Calle="Medrano 511" Localidad="Buenos Aires"/>
<IVA Condicion="Responsasble Inscripto" Porcentaje="21"/>
</Cliente>
<Detalle>
<Articulo Descripcion="Martillo" Precio="15"/>
</Detalle>
</Factura>
<Factura Numero="0000-00001237" Fecha="25-05-2007">
<Cliente>
<Nombre>Toribio Colinas</Nombre>
<Direccion Calle="Maipú 326" Localidad="Bernal"/>
<IVA Condicion="Excento" Porcentaje="0"/>
</Cliente>
<Detalle>
<Articulo Descripcion="Tenaza" Precio="20"/>
<Articulo Descripcion="Destornillador" Precio="9"/>
</Detalle>
</Factura>
</Facturas>

Los elementos <Cliente> que tienen un elemento <Direccion> hijo:


/Facturas/Factura/Cliente[Direccion]

<?xml version="1.0" encoding="ISO-8859-1"?>


<Facturas>
<Factura Numero="0000-00001234" Fecha="25-05-2007">
<Cliente>
<Nombre>Prudencia Saviano</Nombre>
<IVA Condicion="Responsasble Inscripto" Porcentaje="21"/>
</Cliente>
<Detalle>
<Articulo Descripcion="Tenaza" Precio="20"/>
<Articulo Descripcion="Alicate" Precio="15"/>
</Detalle>
</Factura>
<Factura Numero="0000-00001235" Fecha="26-05-2007">
<Cliente>
<Nombre>Eusebio Sanabria</Nombre>
<Direccion Calle="Urquiza 2250" Localidad="Bernal"/>
<IVA Condicion="Responsasble Inscripto" Porcentaje="21"/>
</Cliente>
<Detalle>
<Articulo Descripcion="Pinza" Precio="25"/>
<Articulo Descripcion="Destornillador" Precio="12"/>
<Articulo Descripcion="Sierra" Precio="22"/>
</Detalle>
</Factura>

UNIDAD 5
Curso de HL7 Abierto a la comunidad Iberoamericana
Asociación Civil HL7 Argentina
12
<Factura Numero="0000-00001236" Fecha="26-05-2007">
<Cliente>
<Nombre>Prudencia Saviano</Nombre>
<Direccion Calle="Medrano 511" Localidad="Buenos Aires"/>
<IVA Condicion="Responsasble Inscripto" Porcentaje="21"/>
</Cliente>
<Detalle>
<Articulo Descripcion="Martillo" Precio="15"/>
</Detalle>
</Factura>
<Factura Numero="0000-00001237" Fecha="25-05-2007">
<Cliente>
<Nombre>Toribio Colinas</Nombre>
<Direccion Calle="Maipú 326" Localidad="Bernal"/>
<IVA Condicion="Excento" Porcentaje="0"/>
</Cliente>
<Detalle>
<Articulo Descripcion="Tenaza" Precio="20"/>
<Articulo Descripcion="Destornillador" Precio="9"/>
</Detalle>
</Factura>
</Facturas>

Seleccionemos las facturas de los clientes que tienen dirección. Ahora el


predicado no es sobre un hijo del nodo al que se aplica, sino que hay pasos
dentro del mismo:

/Facturas/Factura[Cliente/Direccion]

<?xml version="1.0" encoding="ISO-8859-1"?>


<Facturas>
<Factura Numero="0000-00001234" Fecha="25-05-2007">
<Cliente>
<Nombre>Prudencia Saviano</Nombre>
<IVA Condicion="Responsasble Inscripto" Porcentaje="21"/>
</Cliente>
<Detalle>
<Articulo Descripcion="Tenaza" Precio="20"/>
<Articulo Descripcion="Alicate" Precio="15"/>
</Detalle>
</Factura>
<Factura Numero="0000-00001235" Fecha="26-05-2007">
<Cliente>
<Nombre>Eusebio Sanabria</Nombre>
<Direccion Calle="Urquiza 2250" Localidad="Bernal"/>
<IVA Condicion="Responsasble Inscripto" Porcentaje="21"/>
</Cliente>
<Detalle>
<Articulo Descripcion="Pinza" Precio="25"/>
<Articulo Descripcion="Destornillador" Precio="12"/>
<Articulo Descripcion="Sierra" Precio="22"/>
</Detalle>
</Factura>
<Factura Numero="0000-00001236" Fecha="26-05-2007">
<Cliente>
<Nombre>Prudencia Saviano</Nombre>
<Direccion Calle="Medrano 511" Localidad="Buenos Aires"/>
<IVA Condicion="Responsasble Inscripto" Porcentaje="21"/>
</Cliente>
<Detalle>
<Articulo Descripcion="Martillo" Precio="15"/>
</Detalle>
</Factura>
<Factura Numero="0000-00001237" Fecha="25-05-2007">
<Cliente>
<Nombre>Toribio Colinas</Nombre>

UNIDAD 5
Curso de HL7 Abierto a la comunidad Iberoamericana
Asociación Civil HL7 Argentina
13
<Direccion Calle="Maipú 326" Localidad="Bernal"/>
<IVA Condicion="Excento" Porcentaje="0"/>
</Cliente>
<Detalle>
<Articulo Descripcion="Tenaza" Precio="20"/>
<Articulo Descripcion="Destornillador" Precio="9"/>
</Detalle>
</Factura>
</Facturas>

Restrinjamos ahora la selección a las facturas de los clientes de Bernal. Para


esto en el predicado bajamos hasta el nivel del atributo Localidad y
hacemos la comparación con el valor buscado. Notemos que lo que se
selecciona es lo que indica el test de nodos, el predicado sólo filtra, no
importa su camino a través de los ejes:
/Facturas/Factura[Cliente/Direccion/@Localidad = "Bernal"]

<?xml version="1.0" encoding="ISO-8859-1"?>


<Facturas>
<Factura Numero="0000-00001234" Fecha="25-05-2007">
<Cliente>
<Nombre>Prudencia Saviano</Nombre>
<IVA Condicion="Responsasble Inscripto" Porcentaje="21"/>
</Cliente>
<Detalle>
<Articulo Descripcion="Tenaza" Precio="20"/>
<Articulo Descripcion="Alicate" Precio="15"/>
</Detalle>
</Factura>
<Factura Numero="0000-00001235" Fecha="26-05-2007">
<Cliente>
<Nombre>Eusebio Sanabria</Nombre>
<Direccion Calle="Urquiza 2250" Localidad="Bernal"/>
<IVA Condicion="Responsasble Inscripto" Porcentaje="21"/>
</Cliente>
<Detalle>
<Articulo Descripcion="Pinza" Precio="25"/>
<Articulo Descripcion="Destornillador" Precio="12"/>
<Articulo Descripcion="Sierra" Precio="22"/>
</Detalle>
</Factura>
<Factura Numero="0000-00001236" Fecha="26-05-2007">
<Cliente>
<Nombre>Prudencia Saviano</Nombre>
<Direccion Calle="Medrano 511" Localidad="Buenos Aires"/>
<IVA Condicion="Responsasble Inscripto" Porcentaje="21"/>
</Cliente>
<Detalle>
<Articulo Descripcion="Martillo" Precio="15"/>
</Detalle>
</Factura>
<Factura Numero="0000-00001237" Fecha="25-05-2007">
<Cliente>
<Nombre>Toribio Colinas</Nombre>
<Direccion Calle="Maipú 326" Localidad="Bernal"/>
<IVA Condicion="Excento" Porcentaje="0"/>
</Cliente>
<Detalle>
<Articulo Descripcion="Tenaza" Precio="20"/>
<Articulo Descripcion="Destornillador" Precio="9"/>
</Detalle>
</Factura>
</Facturas>

UNIDAD 5
Curso de HL7 Abierto a la comunidad Iberoamericana
Asociación Civil HL7 Argentina
14
Podemos utilizar predicados en cualquier paso de la expresión. Si quisiéramos
los artículos tenaza de las facturas de los clientes que tienen dirección,
tenemos que utilizar dos predicados, en distintos pasos, para filtrar
sucesivamente lo que necesitamos, Así seleccionamos las facturas de los
clientes con dirección y luego dentro del detalle de estas, los artículos tenaza:

/Facturas/Factura[Cliente/Direccion]/Detalle/Articulo[@Descripcion="Tenaza"]

<?xml version="1.0" encoding="ISO-8859-1"?>


<Facturas>
<Factura Numero="0000-00001234" Fecha="25-05-2007">
<Cliente>
<Nombre>Prudencia Saviano</Nombre>
<IVA Condicion="Responsasble Inscripto" Porcentaje="21"/>
</Cliente>
<Detalle>
<Articulo Descripcion="Tenaza" Precio="20"/>
<Articulo Descripcion="Alicate" Precio="15"/>
</Detalle>
</Factura>
<Factura Numero="0000-00001235" Fecha="26-05-2007">
<Cliente>
<Nombre>Eusebio Sanabria</Nombre>
<Direccion Calle="Urquiza 2250" Localidad="Bernal"/>
<IVA Condicion="Responsasble Inscripto" Porcentaje="21"/>
</Cliente>
<Detalle>
<Articulo Descripcion="Pinza" Precio="25"/>
<Articulo Descripcion="Destornillador" Precio="12"/>
<Articulo Descripcion="Sierra" Precio="22"/>
</Detalle>
</Factura>
<Factura Numero="0000-00001236" Fecha="26-05-2007">
<Cliente>
<Nombre>Prudencia Saviano</Nombre>
<Direccion Calle="Medrano 511" Localidad="Buenos Aires"/>
<IVA Condicion="Responsasble Inscripto" Porcentaje="21"/>
</Cliente>
<Detalle>
<Articulo Descripcion="Martillo" Precio="15"/>
</Detalle>
</Factura>
<Factura Numero="0000-00001237" Fecha="25-05-2007">
<Cliente>
<Nombre>Toribio Colinas</Nombre>
<Direccion Calle="Maipú 326" Localidad="Bernal"/>
<IVA Condicion="Excento" Porcentaje="0"/>
</Cliente>
<Detalle>
<Articulo Descripcion="Tenaza" Precio="20"/>
<Articulo Descripcion="Destornillador" Precio="9"/>
</Detalle>
</Factura>
</Facturas>

A continuación, el precio ese artículo:


/Facturas/Factura[Cliente/Direccion]/Detalle/Articulo[@Descripcion="Tenaza"]
/@Precio

<?xml version="1.0" encoding="ISO-8859-1"?>


<Facturas>
<Factura Numero="0000-00001234" Fecha="25-05-2007">
<Cliente>

UNIDAD 5
Curso de HL7 Abierto a la comunidad Iberoamericana
Asociación Civil HL7 Argentina
15
<Nombre>Prudencia Saviano</Nombre>
<IVA Condicion="Responsasble Inscripto" Porcentaje="21"/>
</Cliente>
<Detalle>
<Articulo Descripcion="Tenaza" Precio="20"/>
<Articulo Descripcion="Alicate" Precio="15"/>
</Detalle>
</Factura>
<Factura Numero="0000-00001235" Fecha="26-05-2007">
<Cliente>
<Nombre>Eusebio Sanabria</Nombre>
<Direccion Calle="Urquiza 2250" Localidad="Bernal"/>
<IVA Condicion="Responsasble Inscripto" Porcentaje="21"/>
</Cliente>
<Detalle>
<Articulo Descripcion="Pinza" Precio="25"/>
<Articulo Descripcion="Destornillador" Precio="12"/>
<Articulo Descripcion="Sierra" Precio="22"/>
</Detalle>
</Factura>
<Factura Numero="0000-00001236" Fecha="26-05-2007">
<Cliente>
<Nombre>Prudencia Saviano</Nombre>
<Direccion Calle="Medrano 511" Localidad="Buenos Aires"/>
<IVA Condicion="Responsasble Inscripto" Porcentaje="21"/>
</Cliente>
<Detalle>
<Articulo Descripcion="Martillo" Precio="15"/>
</Detalle>
</Factura>
<Factura Numero="0000-00001237" Fecha="25-05-2007">
<Cliente>
<Nombre>Toribio Colinas</Nombre>
<Direccion Calle="Maipú 326" Localidad="Bernal"/>
<IVA Condicion="Excento" Porcentaje="0"/>
</Cliente>
<Detalle>
<Articulo Descripcion="Tenaza" Precio="20"/>
<Articulo Descripcion="Destornillador" Precio="9"/>
</Detalle>
</Factura>
</Facturas>

Veamos como poner una condición sobre el mismo nodo que estamos
seleccionando. Si queremos los precios mayores de 15, usamos un predicado
sobre el mismo nodo de contexto de ese predicado, no sobre algún
descendiente. Siempre usamos el punto (.) para denotar el nodo de
contexto:

/Facturas/Factura/Detalle/Articulo/@Precio[.>15]

<?xml version="1.0" encoding="ISO-8859-1"?>


<Facturas>
<Factura Numero="0000-00001234" Fecha="25-05-2007">
<Cliente>
<Nombre>Prudencia Saviano</Nombre>
<IVA Condicion="Responsasble Inscripto" Porcentaje="21"/>
</Cliente>
<Detalle>
<Articulo Descripcion="Tenaza" Precio="20"/>
<Articulo Descripcion="Alicate" Precio="15"/>
</Detalle>
</Factura>
<Factura Numero="0000-00001235" Fecha="26-05-2007">
<Cliente>

UNIDAD 5
Curso de HL7 Abierto a la comunidad Iberoamericana
Asociación Civil HL7 Argentina
16
<Nombre>Eusebio Sanabria</Nombre>
<Direccion Calle="Urquiza 2250" Localidad="Bernal"/>
<IVA Condicion="Responsasble Inscripto" Porcentaje="21"/>
</Cliente>
<Detalle>
<Articulo Descripcion="Pinza" Precio="25"/>
<Articulo Descripcion="Destornillador" Precio="12"/>
<Articulo Descripcion="Sierra" Precio="22"/>
</Detalle>
</Factura>
<Factura Numero="0000-00001236" Fecha="26-05-2007">
<Cliente>
<Nombre>Prudencia Saviano</Nombre>
<Direccion Calle="Medrano 511" Localidad="Buenos Aires"/>
<IVA Condicion="Responsasble Inscripto" Porcentaje="21"/>
</Cliente>
<Detalle>
<Articulo Descripcion="Martillo" Precio="15"/>
</Detalle>
</Factura>
<Factura Numero="0000-00001237" Fecha="25-05-2007">
<Cliente>
<Nombre>Toribio Colinas</Nombre>
<Direccion Calle="Maipú 326" Localidad="Bernal"/>
<IVA Condicion="Excento" Porcentaje="0"/>
</Cliente>
<Detalle>
<Articulo Descripcion="Tenaza" Precio="20"/>
<Articulo Descripcion="Destornillador" Precio="9"/>
</Detalle>
</Factura>
</Facturas>

Notemos la diferencia del caso anterior con seleccionar los artículos con
precio mayor de 15. El eje que se asume por omisión en el predicado en child:
/Facturas/Factura/Detalle/Articulo[@Precio > 15]

<?xml version="1.0" encoding="ISO-8859-1"?>


<Facturas>
<Factura Numero="0000-00001234" Fecha="25-05-2007">
<Cliente>
<Nombre>Prudencia Saviano</Nombre>
<IVA Condicion="Responsasble Inscripto" Porcentaje="21"/>
</Cliente>
<Detalle>
<Articulo Descripcion="Tenaza" Precio="20"/>
<Articulo Descripcion="Alicate" Precio="15"/>
</Detalle>
</Factura>
<Factura Numero="0000-00001235" Fecha="26-05-2007">
<Cliente>
<Nombre>Eusebio Sanabria</Nombre>
<Direccion Calle="Urquiza 2250" Localidad="Bernal"/>
<IVA Condicion="Responsasble Inscripto" Porcentaje="21"/>
</Cliente>
<Detalle>
<Articulo Descripcion="Pinza" Precio="25"/>
<Articulo Descripcion="Destornillador" Precio="12"/>
<Articulo Descripcion="Sierra" Precio="22"/>
</Detalle>
</Factura>
<Factura Numero="0000-00001236" Fecha="26-05-2007">
<Cliente>
<Nombre>Prudencia Saviano</Nombre>
<Direccion Calle="Medrano 511" Localidad="Buenos Aires"/>
<IVA Condicion="Responsasble Inscripto" Porcentaje="21"/>
UNIDAD 5
Curso de HL7 Abierto a la comunidad Iberoamericana
Asociación Civil HL7 Argentina
17
</Cliente>
<Detalle>
<Articulo Descripcion="Martillo" Precio="15"/>
</Detalle>
</Factura>
<Factura Numero="0000-00001237" Fecha="25-05-2007">
<Cliente>
<Nombre>Toribio Colinas</Nombre>
<Direccion Calle="Maipú 326" Localidad="Bernal"/>
<IVA Condicion="Excento" Porcentaje="0"/>
</Cliente>
<Detalle>
<Articulo Descripcion="Tenaza" Precio="20"/>
<Articulo Descripcion="Destornillador" Precio="9"/>
</Detalle>
</Factura>
</Facturas>

Cambiemos de eje. Vamos a seleccionar los elementos que contienen a los


artículos del ejemplo anterior. En este caso particular podríamos llegar al
mismo resultado con una expresión más sencilla, pero sirva para mostrar el
uso del eje parent. El último paso de la expresión “sube” un nivel y selecciona
el elemento que contiene al resultado del paso anterior:
/Facturas/Factura/Detalle/Articulo[@Precio > 15]/parent::*

<?xml version="1.0" encoding="ISO-8859-1"?>


<Facturas>
<Factura Numero="0000-00001234" Fecha="25-05-2007">
<Cliente>
<Nombre>Prudencia Saviano</Nombre>
<IVA Condicion="Responsasble Inscripto" Porcentaje="21"/>
</Cliente>
<Detalle>
<Articulo Descripcion="Tenaza" Precio="20"/>
<Articulo Descripcion="Alicate" Precio="15"/>
</Detalle>
</Factura>
<Factura Numero="0000-00001235" Fecha="26-05-2007">
<Cliente>
<Nombre>Eusebio Sanabria</Nombre>
<Direccion Calle="Urquiza 2250" Localidad="Bernal"/>
<IVA Condicion="Responsasble Inscripto" Porcentaje="21"/>
</Cliente>
<Detalle>
<Articulo Descripcion="Pinza" Precio="25"/>
<Articulo Descripcion="Destornillador" Precio="12"/>
<Articulo Descripcion="Sierra" Precio="22"/>
</Detalle>
</Factura>
<Factura Numero="0000-00001236" Fecha="26-05-2007">
<Cliente>
<Nombre>Prudencia Saviano</Nombre>
<Direccion Calle="Medrano 511" Localidad="Buenos Aires"/>
<IVA Condicion="Responsasble Inscripto" Porcentaje="21"/>
</Cliente>
<Detalle>
<Articulo Descripcion="Martillo" Precio="15"/>
</Detalle>
</Factura>
<Factura Numero="0000-00001237" Fecha="25-05-2007">
<Cliente>
<Nombre>Toribio Colinas</Nombre>
<Direccion Calle="Maipú 326" Localidad="Bernal"/>
<IVA Condicion="Excento" Porcentaje="0"/>
</Cliente>
UNIDAD 5
Curso de HL7 Abierto a la comunidad Iberoamericana
Asociación Civil HL7 Argentina
18
<Detalle>
<Articulo Descripcion="Tenaza" Precio="20"/>
<Articulo Descripcion="Destornillador" Precio="9"/>
</Detalle>
</Factura>
</Facturas>

Puede verse que en el último paso no utilizamos la notación abreviada. El


motivo es que en este caso la sintaxis abreviada es poco clara y se presta a
confusión. Como en muchos lenguajes, hay algunas “trampas” sintácticas en
XPath. La expresión abreviada equivalente es:
/Facturas/Factura/Detalle/Articulo[@Precio > 15]/..

sin nada a continuación de los dos puntos del eje.

El siguiente ejemplo puede ser más útil, y ya no se puede escribir limitándonos


a los ejes child y attribute. Tampoco tiene notación abreviada. Vamos a
seleccionar el primer artículo que aparece a continuación de un artículo con
precio mayor de 15, en cada factura. El eje en este caso es following-sibling, y
restringiremos el último paso al primer elemento que satisfaga el test de
nodos:

/Facturas/Factura/Detalle/Articulo[@Precio > 15]/following-sibling::*[1]

<?xml version="1.0" encoding="ISO-8859-1"?>


<Facturas>
<Factura Numero="0000-00001234" Fecha="25-05-2007">
<Cliente>
<Nombre>Prudencia Saviano</Nombre>
<IVA Condicion="Responsasble Inscripto" Porcentaje="21"/>
</Cliente>
<Detalle>
<Articulo Descripcion="Tenaza" Precio="20"/>
<Articulo Descripcion="Alicate" Precio="15"/>
</Detalle>
</Factura>
<Factura Numero="0000-00001235" Fecha="26-05-2007">
<Cliente>
<Nombre>Eusebio Sanabria</Nombre>
<Direccion Calle="Urquiza 2250" Localidad="Bernal"/>
<IVA Condicion="Responsasble Inscripto" Porcentaje="21"/>
</Cliente>
<Detalle>
<Articulo Descripcion="Pinza" Precio="25"/>
<Articulo Descripcion="Destornillador" Precio="12"/>
<Articulo Descripcion="Sierra" Precio="22"/>
</Detalle>
</Factura>
<Factura Numero="0000-00001236" Fecha="26-05-2007">
<Cliente>
<Nombre>Prudencia Saviano</Nombre>
<Direccion Calle="Medrano 511" Localidad="Buenos Aires"/>
<IVA Condicion="Responsasble Inscripto" Porcentaje="21"/>
</Cliente>
<Detalle>
<Articulo Descripcion="Martillo" Precio="15"/>
</Detalle>
</Factura>
<Factura Numero="0000-00001237" Fecha="25-05-2007">
<Cliente>
<Nombre>Toribio Colinas</Nombre>
UNIDAD 5
Curso de HL7 Abierto a la comunidad Iberoamericana
Asociación Civil HL7 Argentina
19
<Direccion Calle="Maipú 326" Localidad="Bernal"/>
<IVA Condicion="Excento" Porcentaje="0"/>
</Cliente>
<Detalle>
<Articulo Descripcion="Tenaza" Precio="20"/>
<Articulo Descripcion="Destornillador" Precio="9"/>
</Detalle>
</Factura>
</Facturas>

Por supuesto, podemos seguir agregando pasos a la expresión. Podemos


cambiar de eje cuantas veces sea necesario. Seleccionaremos la descripción
de los artículos del ejemplo anterior:
/Facturas/Factura/Detalle/Articulo[@Precio > 15]/following-sibling::*[1]
/@Descripcion

<?xml version="1.0" encoding="ISO-8859-1"?>


<Facturas>
<Factura Numero="0000-00001234" Fecha="25-05-2007">
<Cliente>
<Nombre>Prudencia Saviano</Nombre>
<IVA Condicion="Responsasble Inscripto" Porcentaje="21"/>
</Cliente>
<Detalle>
<Articulo Descripcion="Tenaza" Precio="20"/>
<Articulo Descripcion="Alicate" Precio="15"/>
</Detalle>
</Factura>
<Factura Numero="0000-00001235" Fecha="26-05-2007">
<Cliente>
<Nombre>Eusebio Sanabria</Nombre>
<Direccion Calle="Urquiza 2250" Localidad="Bernal"/>
<IVA Condicion="Responsasble Inscripto" Porcentaje="21"/>
</Cliente>
<Detalle>
<Articulo Descripcion="Pinza" Precio="25"/>
<Articulo Descripcion="Destornillador" Precio="12"/>
<Articulo Descripcion="Sierra" Precio="22"/>
</Detalle>
</Factura>
<Factura Numero="0000-00001236" Fecha="26-05-2007">
<Cliente>
<Nombre>Prudencia Saviano</Nombre>
<Direccion Calle="Medrano 511" Localidad="Buenos Aires"/>
<IVA Condicion="Responsasble Inscripto" Porcentaje="21"/>
</Cliente>
<Detalle>
<Articulo Descripcion="Martillo" Precio="15"/>
</Detalle>
</Factura>
<Factura Numero="0000-00001237" Fecha="25-05-2007">
<Cliente>
<Nombre>Toribio Colinas</Nombre>
<Direccion Calle="Maipú 326" Localidad="Bernal"/>
<IVA Condicion="Excento" Porcentaje="0"/>
</Cliente>
<Detalle>
<Articulo Descripcion="Tenaza" Precio="20"/>
<Articulo Descripcion="Destornillador" Precio="9"/>
</Detalle>
</Factura>
</Facturas>

UNIDAD 5
Curso de HL7 Abierto a la comunidad Iberoamericana
Asociación Civil HL7 Argentina
20
Vemos un poco las funciones de node set. Estas reciben como argumento un
conjunto de nodos sobre las que actúan, y se las usa en predicados con
comparaciones, por ejemplo.
Seleccionamos las facturas que tienen más de un artículo. Notemos que la
función va al principio del predicado, y si el node set a evaluar requiere varios
pasos, estos van en el argumento:
/Facturas/Factura[count(Detalle/Articulo) >1]

<?xml version="1.0" encoding="ISO-8859-1"?>


<Facturas>
<Factura Numero="0000-00001234" Fecha="25-05-2007">
<Cliente>
<Nombre>Prudencia Saviano</Nombre>
<IVA Condicion="Responsasble Inscripto" Porcentaje="21"/>
</Cliente>
<Detalle>
<Articulo Descripcion="Tenaza" Precio="20"/>
<Articulo Descripcion="Alicate" Precio="15"/>
</Detalle>
</Factura>
<Factura Numero="0000-00001235" Fecha="26-05-2007">
<Cliente>
<Nombre>Eusebio Sanabria</Nombre>
<Direccion Calle="Urquiza 2250" Localidad="Bernal"/>
<IVA Condicion="Responsasble Inscripto" Porcentaje="21"/>
</Cliente>
<Detalle>
<Articulo Descripcion="Pinza" Precio="25"/>
<Articulo Descripcion="Destornillador" Precio="12"/>
<Articulo Descripcion="Sierra" Precio="22"/>
</Detalle>
</Factura>
<Factura Numero="0000-00001236" Fecha="26-05-2007">
<Cliente>
<Nombre>Prudencia Saviano</Nombre>
<Direccion Calle="Medrano 511" Localidad="Buenos Aires"/>
<IVA Condicion="Responsasble Inscripto" Porcentaje="21"/>
</Cliente>
<Detalle>
<Articulo Descripcion="Martillo" Precio="15"/>
</Detalle>
</Factura>
<Factura Numero="0000-00001237" Fecha="25-05-2007">
<Cliente>
<Nombre>Toribio Colinas</Nombre>
<Direccion Calle="Maipú 326" Localidad="Bernal"/>
<IVA Condicion="Excento" Porcentaje="0"/>
</Cliente>
<Detalle>
<Articulo Descripcion="Tenaza" Precio="20"/>
<Articulo Descripcion="Destornillador" Precio="9"/>
</Detalle>
</Factura>
</Facturas>

También podemos usar predicados para filtrar los pasos que seleccionan el
node set que se pasa a la función. A continuación vamos a seleccionar las
facturas que tienen más de un artículo con precio superior a 15:
/Facturas/Factura[count(Detalle/Articulo[@Precio >15])>1]

<?xml version="1.0" encoding="ISO-8859-1"?>

UNIDAD 5
Curso de HL7 Abierto a la comunidad Iberoamericana
Asociación Civil HL7 Argentina
21
<Facturas>
<Factura Numero="0000-00001234" Fecha="25-05-2007">
<Cliente>
<Nombre>Prudencia Saviano</Nombre>
<IVA Condicion="Responsasble Inscripto" Porcentaje="21"/>
</Cliente>
<Detalle>
<Articulo Descripcion="Tenaza" Precio="20"/>
<Articulo Descripcion="Alicate" Precio="15"/>
</Detalle>
</Factura>
<Factura Numero="0000-00001235" Fecha="26-05-2007">
<Cliente>
<Nombre>Eusebio Sanabria</Nombre>
<Direccion Calle="Urquiza 2250" Localidad="Bernal"/>
<IVA Condicion="Responsasble Inscripto" Porcentaje="21"/>
</Cliente>
<Detalle>
<Articulo Descripcion="Pinza" Precio="25"/>
<Articulo Descripcion="Destornillador" Precio="12"/>
<Articulo Descripcion="Sierra" Precio="22"/>
</Detalle>
</Factura>
<Factura Numero="0000-00001236" Fecha="26-05-2007">
<Cliente>
<Nombre>Prudencia Saviano</Nombre>
<Direccion Calle="Medrano 511" Localidad="Buenos Aires"/>
<IVA Condicion="Responsasble Inscripto" Porcentaje="21"/>
</Cliente>
<Detalle>
<Articulo Descripcion="Martillo" Precio="15"/>
</Detalle>
</Factura>
<Factura Numero="0000-00001237" Fecha="25-05-2007">
<Cliente>
<Nombre>Toribio Colinas</Nombre>
<Direccion Calle="Maipú 326" Localidad="Bernal"/>
<IVA Condicion="Excento" Porcentaje="0"/>
</Cliente>
<Detalle>
<Articulo Descripcion="Tenaza" Precio="20"/>
<Articulo Descripcion="Destornillador" Precio="9"/>
</Detalle>
</Factura>
</Facturas>

Ahora, de las facturas que tengan más de un artículo, seleccionamos los


artículos con precio menor que 20:
/Facturas/Factura[count(Detalle/Articulo)>1]/Detalle/Articulo[@Precio < 20]

<?xml version="1.0" encoding="ISO-8859-1"?>


<Facturas>
<Factura Numero="0000-00001234" Fecha="25-05-2007">
<Cliente>
<Nombre>Prudencia Saviano</Nombre>
<IVA Condicion="Responsasble Inscripto" Porcentaje="21"/>
</Cliente>
<Detalle>
<Articulo Descripcion="Tenaza" Precio="20"/>
<Articulo Descripcion="Alicate" Precio="15"/>
</Detalle>
</Factura>
<Factura Numero="0000-00001235" Fecha="26-05-2007">
<Cliente>
<Nombre>Eusebio Sanabria</Nombre>
<Direccion Calle="Urquiza 2250" Localidad="Bernal"/>
UNIDAD 5
Curso de HL7 Abierto a la comunidad Iberoamericana
Asociación Civil HL7 Argentina
22
<IVA Condicion="Responsasble Inscripto" Porcentaje="21"/>
</Cliente>
<Detalle>
<Articulo Descripcion="Pinza" Precio="25"/>
<Articulo Descripcion="Destornillador" Precio="12"/>
<Articulo Descripcion="Sierra" Precio="22"/>
</Detalle>
</Factura>
<Factura Numero="0000-00001236" Fecha="26-05-2007">
<Cliente>
<Nombre>Prudencia Saviano</Nombre>
<Direccion Calle="Medrano 511" Localidad="Buenos Aires"/>
<IVA Condicion="Responsasble Inscripto" Porcentaje="21"/>
</Cliente>
<Detalle>
<Articulo Descripcion="Martillo" Precio="15"/>
</Detalle>
</Factura>
<Factura Numero="0000-00001237" Fecha="25-05-2007">
<Cliente>
<Nombre>Toribio Colinas</Nombre>
<Direccion Calle="Maipú 326" Localidad="Bernal"/>
<IVA Condicion="Excento" Porcentaje="0"/>
</Cliente>
<Detalle>
<Articulo Descripcion="Tenaza" Precio="20"/>
<Articulo Descripcion="Destornillador" Precio="9"/>
</Detalle>
</Factura>
</Facturas>

Podemos poner más de un predicado en el paso, y el resultado deberá


satisfacer todos esos predicados. Seleccionemos las facturas que tienen más
de un artículo, y además tienen algún artículo con precio menor que 20:
/Facturas/Factura[count(Detalle/Articulo) >1][Detalle/Articulo/@Precio < 20]

<?xml version="1.0" encoding="ISO-8859-1"?>


<Facturas>
<Factura Numero="0000-00001234" Fecha="25-05-2007">
<Cliente>
<Nombre>Prudencia Saviano</Nombre>
<IVA Condicion="Responsasble Inscripto" Porcentaje="21"/>
</Cliente>
<Detalle>
<Articulo Descripcion="Tenaza" Precio="20"/>
<Articulo Descripcion="Alicate" Precio="15"/>
</Detalle>
</Factura>
<Factura Numero="0000-00001235" Fecha="26-05-2007">
<Cliente>
<Nombre>Eusebio Sanabria</Nombre>
<Direccion Calle="Urquiza 2250" Localidad="Bernal"/>
<IVA Condicion="Responsasble Inscripto" Porcentaje="21"/>
</Cliente>
<Detalle>
<Articulo Descripcion="Pinza" Precio="25"/>
<Articulo Descripcion="Destornillador" Precio="12"/>
<Articulo Descripcion="Sierra" Precio="22"/>
</Detalle>
</Factura>
<Factura Numero="0000-00001236" Fecha="26-05-2007">
<Cliente>
<Nombre>Prudencia Saviano</Nombre>
<Direccion Calle="Medrano 511" Localidad="Buenos Aires"/>
<IVA Condicion="Responsasble Inscripto" Porcentaje="21"/>

UNIDAD 5
Curso de HL7 Abierto a la comunidad Iberoamericana
Asociación Civil HL7 Argentina
23
</Cliente>
<Detalle>
<Articulo Descripcion="Martillo" Precio="15"/>
</Detalle>
</Factura>
<Factura Numero="0000-00001237" Fecha="25-05-2007">
<Cliente>
<Nombre>Toribio Colinas</Nombre>
<Direccion Calle="Maipú 326" Localidad="Bernal"/>
<IVA Condicion="Excento" Porcentaje="0"/>
</Cliente>
<Detalle>
<Articulo Descripcion="Tenaza" Precio="20"/>
<Articulo Descripcion="Destornillador" Precio="9"/>
</Detalle>
</Factura>
</Facturas>

Hagamos algunas cuentas. Seleccionamos las facturas en las que la suma del
precio de sus artículos es mayor que 36:
/Facturas/Factura[sum(Detalle/Articulo/@Precio) > 36]

<?xml version="1.0" encoding="ISO-8859-1"?>


<Facturas>
<Factura Numero="0000-00001234" Fecha="25-05-2007">
<Cliente>
<Nombre>Prudencia Saviano</Nombre>
<IVA Condicion="Responsasble Inscripto" Porcentaje="21"/>
</Cliente>
<Detalle>
<Articulo Descripcion="Tenaza" Precio="20"/>
<Articulo Descripcion="Alicate" Precio="15"/>
</Detalle>
</Factura>
<Factura Numero="0000-00001235" Fecha="26-05-2007">
<Cliente>
<Nombre>Eusebio Sanabria</Nombre>
<Direccion Calle="Urquiza 2250" Localidad="Bernal"/>
<IVA Condicion="Responsasble Inscripto" Porcentaje="21"/>
</Cliente>
<Detalle>
<Articulo Descripcion="Pinza" Precio="25"/>
<Articulo Descripcion="Destornillador" Precio="12"/>
<Articulo Descripcion="Sierra" Precio="22"/>
</Detalle>
</Factura>
<Factura Numero="0000-00001236" Fecha="26-05-2007">
<Cliente>
<Nombre>Prudencia Saviano</Nombre>
<Direccion Calle="Medrano 511" Localidad="Buenos Aires"/>
<IVA Condicion="Responsasble Inscripto" Porcentaje="21"/>
</Cliente>
<Detalle>
<Articulo Descripcion="Martillo" Precio="15"/>
</Detalle>
</Factura>
<Factura Numero="0000-00001237" Fecha="25-05-2007">
<Cliente>
<Nombre>Toribio Colinas</Nombre>
<Direccion Calle="Maipú 326" Localidad="Bernal"/>
<IVA Condicion="Excento" Porcentaje="0"/>
</Cliente>
<Detalle>
<Articulo Descripcion="Tenaza" Precio="20"/>
<Articulo Descripcion="Destornillador" Precio="9"/>
</Detalle>
UNIDAD 5
Curso de HL7 Abierto a la comunidad Iberoamericana
Asociación Civil HL7 Argentina
24
</Factura>
</Facturas>

Y ahora, las facturas en las que la suma del precio de sus artículos más el
porcentaje de IVA (Impuesto al Valor Agregado) correspondiente a su cliente
es superior a 36:
/Facturas/Factura[sum(Detalle/Articulo/@Precio) * (Cliente/IVA/@Porcentaje +
100) div 100 > 36]

<?xml version="1.0" encoding="ISO-8859-1"?>


<Facturas>
<Factura Numero="0000-00001234" Fecha="25-05-2007">
<Cliente>
<Nombre>Prudencia Saviano</Nombre>
<IVA Condicion="Responsasble Inscripto" Porcentaje="21"/>
</Cliente>
<Detalle>
<Articulo Descripcion="Tenaza" Precio="20"/>
<Articulo Descripcion="Alicate" Precio="15"/>
</Detalle>
</Factura>
<Factura Numero="0000-00001235" Fecha="26-05-2007">
<Cliente>
<Nombre>Eusebio Sanabria</Nombre>
<Direccion Calle="Urquiza 2250" Localidad="Bernal"/>
<IVA Condicion="Responsasble Inscripto" Porcentaje="21"/>
</Cliente>
<Detalle>
<Articulo Descripcion="Pinza" Precio="25"/>
<Articulo Descripcion="Destornillador" Precio="12"/>
<Articulo Descripcion="Sierra" Precio="22"/>
</Detalle>
</Factura>
<Factura Numero="0000-00001236" Fecha="26-05-2007">
<Cliente>
<Nombre>Prudencia Saviano</Nombre>
<Direccion Calle="Medrano 511" Localidad="Buenos Aires"/>
<IVA Condicion="Responsasble Inscripto" Porcentaje="21"/>
</Cliente>
<Detalle>
<Articulo Descripcion="Martillo" Precio="15"/>
</Detalle>
</Factura>
<Factura Numero="0000-00001237" Fecha="25-05-2007">
<Cliente>
<Nombre>Toribio Colinas</Nombre>
<Direccion Calle="Maipú 326" Localidad="Bernal"/>
<IVA Condicion="Excento" Porcentaje="0"/>
</Cliente>
<Detalle>
<Articulo Descripcion="Tenaza" Precio="20"/>
<Articulo Descripcion="Destornillador" Precio="9"/>
</Detalle>
</Factura>
</Facturas>

Finalmente, algunas expresiones relativas. Vamos a resaltar el nodo de


contexto en verde y el resultado de la expresión en amarillo.
Digamos que el nodo de contexto es el cliente de la tercer factura:

/Facturas/Factura[3]/Cliente

<?xml version="1.0" encoding="ISO-8859-1"?>


UNIDAD 5
Curso de HL7 Abierto a la comunidad Iberoamericana
Asociación Civil HL7 Argentina
25
<Facturas>
<Factura Numero="0000-00001234" Fecha="25-05-2007">
<Cliente>
<Nombre>Prudencia Saviano</Nombre>
<IVA Condicion="Responsasble Inscripto" Porcentaje="21"/>
</Cliente>
<Detalle>
<Articulo Descripcion="Tenaza" Precio="20"/>
<Articulo Descripcion="Alicate" Precio="15"/>
</Detalle>
</Factura>
<Factura Numero="0000-00001235" Fecha="26-05-2007">
<Cliente>
<Nombre>Eusebio Sanabria</Nombre>
<Direccion Calle="Urquiza 2250" Localidad="Bernal"/>
<IVA Condicion="Responsasble Inscripto" Porcentaje="21"/>
</Cliente>
<Detalle>
<Articulo Descripcion="Pinza" Precio="25"/>
<Articulo Descripcion="Destornillador" Precio="12"/>
<Articulo Descripcion="Sierra" Precio="22"/>
</Detalle>
</Factura>
<Factura Numero="0000-00001236" Fecha="26-05-2007">
<Cliente>
<Nombre>Prudencia Saviano</Nombre>
<Direccion Calle="Medrano 511" Localidad="Buenos Aires"/>
<IVA Condicion="Responsasble Inscripto" Porcentaje="21"/>
</Cliente>
<Detalle>
<Articulo Descripcion="Martillo" Precio="15"/>
</Detalle>
</Factura>
<Factura Numero="0000-00001237" Fecha="25-05-2007">
<Cliente>
<Nombre>Toribio Colinas</Nombre>
<Direccion Calle="Maipú 326" Localidad="Bernal"/>
<IVA Condicion="Excento" Porcentaje="0"/>
</Cliente>
<Detalle>
<Articulo Descripcion="Tenaza" Precio="20"/>
<Articulo Descripcion="Destornillador" Precio="9"/>
</Detalle>
</Factura>
</Facturas>

El eje parent nos llevará el nodo que contiene al de contexto:

./parent::*

<?xml version="1.0" encoding="ISO-8859-1"?>


<Facturas>
<Factura Numero="0000-00001234" Fecha="25-05-2007">
<Cliente>
<Nombre>Prudencia Saviano</Nombre>
<IVA Condicion="Responsasble Inscripto" Porcentaje="21"/>
</Cliente>
<Detalle>
<Articulo Descripcion="Tenaza" Precio="20"/>
<Articulo Descripcion="Alicate" Precio="15"/>
</Detalle>
</Factura>
<Factura Numero="0000-00001235" Fecha="26-05-2007">
<Cliente>
<Nombre>Eusebio Sanabria</Nombre>
<Direccion Calle="Urquiza 2250" Localidad="Bernal"/>

UNIDAD 5
Curso de HL7 Abierto a la comunidad Iberoamericana
Asociación Civil HL7 Argentina
26
<IVA Condicion="Responsasble Inscripto" Porcentaje="21"/>
</Cliente>
<Detalle>
<Articulo Descripcion="Pinza" Precio="25"/>
<Articulo Descripcion="Destornillador" Precio="12"/>
<Articulo Descripcion="Sierra" Precio="22"/>
</Detalle>
</Factura>
<Factura Numero="0000-00001236" Fecha="26-05-2007">
<Cliente>
<Nombre>Prudencia Saviano</Nombre>
<Direccion Calle="Medrano 511" Localidad="Buenos Aires"/>
<IVA Condicion="Responsasble Inscripto" Porcentaje="21"/>
</Cliente>
<Detalle>
<Articulo Descripcion="Martillo" Precio="15"/>
</Detalle>
</Factura>
<Factura Numero="0000-00001237" Fecha="25-05-2007">
<Cliente>
<Nombre>Toribio Colinas</Nombre>
<Direccion Calle="Maipú 326" Localidad="Bernal"/>
<IVA Condicion="Excento" Porcentaje="0"/>
</Cliente>
<Detalle>
<Articulo Descripcion="Tenaza" Precio="20"/>
<Articulo Descripcion="Destornillador" Precio="9"/>
</Detalle>
</Factura>
</Facturas>

Seleccionemos los artículos que compró con esa factura:

./parent::Factura/Detalle/Articulo

<?xml version="1.0" encoding="ISO-8859-1"?>


<Facturas>
<Factura Numero="0000-00001234" Fecha="25-05-2007">
<Cliente>
<Nombre>Prudencia Saviano</Nombre>
<IVA Condicion="Responsasble Inscripto" Porcentaje="21"/>
</Cliente>
<Detalle>
<Articulo Descripcion="Tenaza" Precio="20"/>
<Articulo Descripcion="Alicate" Precio="15"/>
</Detalle>
</Factura>
<Factura Numero="0000-00001235" Fecha="26-05-2007">
<Cliente>
<Nombre>Eusebio Sanabria</Nombre>
<Direccion Calle="Urquiza 2250" Localidad="Bernal"/>
<IVA Condicion="Responsasble Inscripto" Porcentaje="21"/>
</Cliente>
<Detalle>
<Articulo Descripcion="Pinza" Precio="25"/>
<Articulo Descripcion="Destornillador" Precio="12"/>
<Articulo Descripcion="Sierra" Precio="22"/>
</Detalle>
</Factura>
<Factura Numero="0000-00001236" Fecha="26-05-2007">
<Cliente>
<Nombre>Prudencia Saviano</Nombre>
<Direccion Calle="Medrano 511" Localidad="Buenos Aires"/>
<IVA Condicion="Responsasble Inscripto" Porcentaje="21"/>
</Cliente>
<Detalle>
<Articulo Descripcion="Martillo" Precio="15"/>
UNIDAD 5
Curso de HL7 Abierto a la comunidad Iberoamericana
Asociación Civil HL7 Argentina
27
</Detalle>
</Factura>
<Factura Numero="0000-00001237" Fecha="25-05-2007">
<Cliente>
<Nombre>Toribio Colinas</Nombre>
<Direccion Calle="Maipú 326" Localidad="Bernal"/>
<IVA Condicion="Excento" Porcentaje="0"/>
</Cliente>
<Detalle>
<Articulo Descripcion="Tenaza" Precio="20"/>
<Articulo Descripcion="Destornillador" Precio="9"/>
</Detalle>
</Factura>
</Facturas>

El eje preceding da acceso al contenido del documento XML que se


encuentra antes del nodo de contexto, en el orden secuencial en que está
escrito el documento. Seleccionemos los elementos <Cliente> de las
facturas que están antes de la actual:
./parent::*/preceding::Cliente

<?xml version="1.0" encoding="ISO-8859-1"?>


<Facturas>
<Factura Numero="0000-00001234" Fecha="25-05-2007">
<Cliente>
<Nombre>Prudencia Saviano</Nombre>
<IVA Condicion="Responsasble Inscripto" Porcentaje="21"/>
</Cliente>
<Detalle>
<Articulo Descripcion="Tenaza" Precio="20"/>
<Articulo Descripcion="Alicate" Precio="15"/>
</Detalle>
</Factura>
<Factura Numero="0000-00001235" Fecha="26-05-2007">
<Cliente>
<Nombre>Eusebio Sanabria</Nombre>
<Direccion Calle="Urquiza 2250" Localidad="Bernal"/>
<IVA Condicion="Responsasble Inscripto" Porcentaje="21"/>
</Cliente>
<Detalle>
<Articulo Descripcion="Pinza" Precio="25"/>
<Articulo Descripcion="Destornillador" Precio="12"/>
<Articulo Descripcion="Sierra" Precio="22"/>
</Detalle>
</Factura>
<Factura Numero="0000-00001236" Fecha="26-05-2007">
<Cliente>
<Nombre>Prudencia Saviano</Nombre>
<Direccion Calle="Medrano 511" Localidad="Buenos Aires"/>
<IVA Condicion="Responsasble Inscripto" Porcentaje="21"/>
</Cliente>
<Detalle>
<Articulo Descripcion="Martillo" Precio="15"/>
</Detalle>
</Factura>
<Factura Numero="0000-00001237" Fecha="25-05-2007">
<Cliente>
<Nombre>Toribio Colinas</Nombre>
<Direccion Calle="Maipú 326" Localidad="Bernal"/>
<IVA Condicion="Excento" Porcentaje="0"/>
</Cliente>
<Detalle>
<Articulo Descripcion="Tenaza" Precio="20"/>
<Articulo Descripcion="Destornillador" Precio="9"/>
</Detalle>
UNIDAD 5
Curso de HL7 Abierto a la comunidad Iberoamericana
Asociación Civil HL7 Argentina
28
</Factura>
</Facturas>

¡Cuidado con los ejes que van hacia el principio del documento, como
preceding, preceding-sibling, ancestor, etc. y la posición de los nodos en el
node set resultante! El orden es invertido al secuencial del documento: es en
el sentido del eje.
./ancestor::*[1]

<?xml version="1.0" encoding="ISO-8859-1"?>


<Facturas>
<Factura Numero="0000-00001234" Fecha="25-05-2007">
<Cliente>
<Nombre>Prudencia Saviano</Nombre>
<IVA Condicion="Responsasble Inscripto" Porcentaje="21"/>
</Cliente>
<Detalle>
<Articulo Descripcion="Tenaza" Precio="20"/>
<Articulo Descripcion="Alicate" Precio="15"/>
</Detalle>
</Factura>
<Factura Numero="0000-00001235" Fecha="26-05-2007">
<Cliente>
<Nombre>Eusebio Sanabria</Nombre>
<Direccion Calle="Urquiza 2250" Localidad="Bernal"/>
<IVA Condicion="Responsasble Inscripto" Porcentaje="21"/>
</Cliente>
<Detalle>
<Articulo Descripcion="Pinza" Precio="25"/>
<Articulo Descripcion="Destornillador" Precio="12"/>
<Articulo Descripcion="Sierra" Precio="22"/>
</Detalle>
</Factura>
<Factura Numero="0000-00001236" Fecha="26-05-2007">
<Cliente>
<Nombre>Prudencia Saviano</Nombre>
<Direccion Calle="Medrano 511" Localidad="Buenos Aires"/>
<IVA Condicion="Responsasble Inscripto" Porcentaje="21"/>
</Cliente>
<Detalle>
<Articulo Descripcion="Martillo" Precio="15"/>
</Detalle>
</Factura>
<Factura Numero="0000-00001237" Fecha="25-05-2007">
<Cliente>
<Nombre>Toribio Colinas</Nombre>
<Direccion Calle="Maipú 326" Localidad="Bernal"/>
<IVA Condicion="Excento" Porcentaje="0"/>
</Cliente>
<Detalle>
<Articulo Descripcion="Tenaza" Precio="20"/>
<Articulo Descripcion="Destornillador" Precio="9"/>
</Detalle>
</Factura>
</Facturas>

./ancestor::*[2]

<?xml version="1.0" encoding="ISO-8859-1"?>


<Facturas>
<Factura Numero="0000-00001234" Fecha="25-05-2007">
<Cliente>
<Nombre>Prudencia Saviano</Nombre>
<IVA Condicion="Responsasble Inscripto" Porcentaje="21"/>
</Cliente>
UNIDAD 5
Curso de HL7 Abierto a la comunidad Iberoamericana
Asociación Civil HL7 Argentina
29
<Detalle>
<Articulo Descripcion="Tenaza" Precio="20"/>
<Articulo Descripcion="Alicate" Precio="15"/>
</Detalle>
</Factura>
<Factura Numero="0000-00001235" Fecha="26-05-2007">
<Cliente>
<Nombre>Eusebio Sanabria</Nombre>
<Direccion Calle="Urquiza 2250" Localidad="Bernal"/>
<IVA Condicion="Responsasble Inscripto" Porcentaje="21"/>
</Cliente>
<Detalle>
<Articulo Descripcion="Pinza" Precio="25"/>
<Articulo Descripcion="Destornillador" Precio="12"/>
<Articulo Descripcion="Sierra" Precio="22"/>
</Detalle>
</Factura>
<Factura Numero="0000-00001236" Fecha="26-05-2007">
<Cliente>
<Nombre>Prudencia Saviano</Nombre>
<Direccion Calle="Medrano 511" Localidad="Buenos Aires"/>
<IVA Condicion="Responsasble Inscripto" Porcentaje="21"/>
</Cliente>
<Detalle>
<Articulo Descripcion="Martillo" Precio="15"/>
</Detalle>
</Factura>
<Factura Numero="0000-00001237" Fecha="25-05-2007">
<Cliente>
<Nombre>Toribio Colinas</Nombre>
<Direccion Calle="Maipú 326" Localidad="Bernal"/>
<IVA Condicion="Excento" Porcentaje="0"/>
</Cliente>
<Detalle>
<Articulo Descripcion="Tenaza" Precio="20"/>
<Articulo Descripcion="Destornillador" Precio="9"/>
</Detalle>
</Factura>
</Facturas>

Podemos también utilizar varios pasos y predicados en las expresiones


relativas. Tomemos ahora como nodo de contexto el cliente de la segunda
factura:
/Facturas/Factura[2]/Cliente

<?xml version="1.0" encoding="ISO-8859-1"?>


<Facturas>
<Factura Numero="0000-00001234" Fecha="25-05-2007">
<Cliente>
<Nombre>Prudencia Saviano</Nombre>
<IVA Condicion="Responsasble Inscripto" Porcentaje="21"/>
</Cliente>
<Detalle>
<Articulo Descripcion="Tenaza" Precio="20"/>
<Articulo Descripcion="Alicate" Precio="15"/>
</Detalle>
</Factura>
<Factura Numero="0000-00001235" Fecha="26-05-2007">
<Cliente>
<Nombre>Eusebio Sanabria</Nombre>
<Direccion Calle="Urquiza 2250" Localidad="Bernal"/>
<IVA Condicion="Responsasble Inscripto" Porcentaje="21"/>
</Cliente>
<Detalle>
<Articulo Descripcion="Pinza" Precio="25"/>

UNIDAD 5
Curso de HL7 Abierto a la comunidad Iberoamericana
Asociación Civil HL7 Argentina
30
<Articulo Descripcion="Destornillador" Precio="12"/>
<Articulo Descripcion="Sierra" Precio="22"/>
</Detalle>
</Factura>
<Factura Numero="0000-00001236" Fecha="26-05-2007">
<Cliente>
<Nombre>Prudencia Saviano</Nombre>
<Direccion Calle="Medrano 511" Localidad="Buenos Aires"/>
<IVA Condicion="Responsasble Inscripto" Porcentaje="21"/>
</Cliente>
<Detalle>
<Articulo Descripcion="Martillo" Precio="15"/>
</Detalle>
</Factura>
<Factura Numero="0000-00001237" Fecha="25-05-2007">
<Cliente>
<Nombre>Toribio Colinas</Nombre>
<Direccion Calle="Maipú 326" Localidad="Bernal"/>
<IVA Condicion="Excento" Porcentaje="0"/>
</Cliente>
<Detalle>
<Articulo Descripcion="Tenaza" Precio="20"/>
<Articulo Descripcion="Destornillador" Precio="9"/>
</Detalle>
</Factura>
</Facturas>

Seleccionemos la descripción de los artículos del detalle de la factura actual


que tengan precio mayor de 20:
./following-sibling::Detalle/Articulo[@Precio > 20]/@Descripcion

<?xml version="1.0" encoding="ISO-8859-1"?>


<Facturas>
<Factura Numero="0000-00001234" Fecha="25-05-2007">
<Cliente>
<Nombre>Prudencia Saviano</Nombre>
<IVA Condicion="Responsasble Inscripto" Porcentaje="21"/>
</Cliente>
<Detalle>
<Articulo Descripcion="Tenaza" Precio="20"/>
<Articulo Descripcion="Alicate" Precio="15"/>
</Detalle>
</Factura>
<Factura Numero="0000-00001235" Fecha="26-05-2007">
<Cliente>
<Nombre>Eusebio Sanabria</Nombre>
<Direccion Calle="Urquiza 2250" Localidad="Bernal"/>
<IVA Condicion="Responsasble Inscripto" Porcentaje="21"/>
</Cliente>
<Detalle>
<Articulo Descripcion="Pinza" Precio="25"/>
<Articulo Descripcion="Destornillador" Precio="12"/>
<Articulo Descripcion="Sierra" Precio="22"/>
</Detalle>
</Factura>
<Factura Numero="0000-00001236" Fecha="26-05-2007">
<Cliente>
<Nombre>Prudencia Saviano</Nombre>
<Direccion Calle="Medrano 511" Localidad="Buenos Aires"/>
<IVA Condicion="Responsasble Inscripto" Porcentaje="21"/>
</Cliente>
<Detalle>
<Articulo Descripcion="Martillo" Precio="15"/>
</Detalle>
</Factura>
<Factura Numero="0000-00001237" Fecha="25-05-2007">
UNIDAD 5
Curso de HL7 Abierto a la comunidad Iberoamericana
Asociación Civil HL7 Argentina
31
<Cliente>
<Nombre>Toribio Colinas</Nombre>
<Direccion Calle="Maipú 326" Localidad="Bernal"/>
<IVA Condicion="Excento" Porcentaje="0"/>
</Cliente>
<Detalle>
<Articulo Descripcion="Tenaza" Precio="20"/>
<Articulo Descripcion="Destornillador" Precio="9"/>
</Detalle>
</Factura>
</Facturas>

Estos son solamente unos cuantos ejemplos que muestran varias situaciones
comunes. Las posibilidades son innumerables. Y como en casi todo, la
práctica hace al maestro.

La especificación de XPath del W3C, está disponible en


http://www.w3.org/TR/xpath.

Existen varias aplicaciones, comerciales y libres, para evaluar expresiones de


XPath sobre algún documento XML dado. Permiten probar las expresiones y
ver el resultado de la selección. Esta es una de las mejores formas de adquirir
práctica y seguridad en XPath.

UNIDAD 5
Curso de HL7 Abierto a la comunidad Iberoamericana
Asociación Civil HL7 Argentina
32