Omet navegació

4.2.1.4 - Funcions

XPath ofereix una gran quantitat de funcions destinades a manipular els resultats obtinguts.

Aquestes funcions es classifiquen en diferents grups:

  • Per manipular conjunts de nodes: es pot obtenir el nom dels nodes, treballar amb les posicions, comptar-los, etc.
  • Per treballar amb cadenes de caràcters: permeten extreure caràcters, concatenar, comparar… les cadenes de caràcters.
  • Per fer operacions numèriques: es poden convertir els resultats a valors numèrics, comptar els nodes, fer operacions, etc.
  • Funcions booleanes: permeten fer operacions booleanes amb els nodes.
  • Funcions per dates: permeten fer operacions diverses amb dates i hores.

És impossible especificar-les totes en aquestos apunts, de manera que el millor és consultar l’especificació XPath (http://www.w3.org/TR/xpath-functions) per veure quines funcions es poden fer servir.

Entre totes les funcions podem destacar les de la següent taula:

Funció Explicació
name() Retorna el nom del node
sum() Retorna la suma d’una seqüència de nodes o de valors
count() Retorna el nombre de nodes que hi ha en una seqüència
avg() Fa la mitjana dels valors de la seqüència
max() Retorna el valor màxim de la seqüència
min() Dóna el valor mínim de la seqüència
position() Diu en quina posició es troba el node actual
last() Retorna si el node actual és l’últim
distinct-values() Retorna els elements de la seqüència sense duplicats
concat() Uneix dues cadenes de caràcters
starts-with() Retorna si la cadena comença amb els caràcters marcats
contains() Ens diu si el resultat conté el valor
string-length() Retorna la llargària de la cadena
substring() Permet extraure una subcadena del resultat
string-join() Uneix la seqüència amb el separador especificat
current-date() Ens retornarà l’hora actual
not() Inverteix el valors booleans

Amb les funcions es podran fer peticions que retornen valors numèrics. Per exemple, “quants alumnes tenim?”: 

count(/classe/alumnes/alumne)

que tornarà el nombre d'alumnes del fitxer 

3

O bé retornar cadenes de caràcters. Per exemple, unir tots els noms, separant-los per una coma: 

string-join(/classe//nom,",")

que tornarà en un únic resultat els noms separats per una coma: 

"Joan,Albert,Bernat,Joan"

També es poden posar les funcions en les condicions. Per exemple, aquesta expressió ens tornarà els alumnes amb el cognom que comence per B: 

/classe/alumnes/alumne[starts-with(cognoms,"B")]
<alumne aprovat="no">
<nom>Bernat</nom>
<cognoms>Balaguer</cognoms>
<nota>3</nota>
</alumne>

En aquesta expressió volem obtenir el tercer alumne de la llista: 

/classe/alumnes/alumne[position()=3]
<alumne delegat="si" aprovat="si">
<nom>Joan</nom>
<cognoms>Centelles</cognoms>
<nota>8</nota>
</alumne>