Documentation
- référence xpath V1 : http://xmlfr.org/w3c/TR/xpath/
- cours de xpath : http://www.habegger.fr/teaching.html
- cours de xpath : http://www.dil.univ-mrs.fr/~massat/ens/xml/4-xpath.html
- filtrer une liste comportant des doublons : http://xmlfr.org/documentations/faq/050331-0001
La décomposition d'un chemin Xpath
- Un chemin absolu ou relatif
- Se décompose en étapes
- Une étape est constituée de trois parties :
- direction
- un test de noeud
- un prédicat
- Forme d’une étape :
direction::test[prédicat]
axe::filtre[condition1][condition2]...
- Les étapes sont séparées par le caractère
/
Les directions

Exemples
- Fils de l’élément courant qui contiennent au moins un élément loyer :
child::*[loyer]
- Tous les éléments du document contenant soit un élément loyer soit un élément prix :
//*[loyer or prix]
- Toutes les locations ayant un loyer en euro et supérieur à 400 :
//annonces-immobilieres/location[loyer/@monnaie="euro" and loyer>400]
- Les éléments dont le prix ou le loyer est égale à 500 :
//*[(prix|loyer)=500]
Note : //*[prix=500 or loyer=500]
marche aussi mais //*[(prix or loyer) = 500]
est incorrecte !!!
- Les noeuds sauf la racine qui ont un noeud texte comme fils contenant la chaîne "bonjour" :
/descendant::node()[child::text()[contains(string(),"bonjour")]]
- Le noeud père du père du noeud courant (grand-père) :
ancestor::node()[position()=2]
- Grand-père deuxième version :
parent::node()/parent::node()
- L’attribut src du noeud courant (s’il existe) :
attribute::src
- Les liens hypertexte d’une page HTML :
/descendant-or-self::a/@href
- Les contacts dont l’email contient "@duchemin" :
//contact[contains(email,"@duchemin")]
- Le contenu du document sauf le titre, le sous titre, le titre abrégé ou les éléments info ou bookinfo
node()[not(self::title or self::subtitle or self::titleabbrev or self::info or self::bookinfo)]
child::para
sélectionne l'élément para enfant du noeud contextuelchild::*
sélectionne tous les éléments enfant du noeud contextuelchild::text()
sélectionne tous les noeuds textuels du noeud contextuelchild::node()
sélectionne tous les enfants du noeud contextuel, quelque soit leur typeattribute::name
sélectionne l'attribut name du noeud contextuelattribute::*
sélectionne tous les attributs du noeud contextueldescendant::para
sélectionne tous les descendants para du noeud contextuelancestor::div
sélectionne tous les ancêtres div du noeud contextuelancestor-or-self::div
sélectionne tous les ancêtres div du noeud contextuel et le noeud contextuel lui-même si c'est un divdescendant-or-self::para
sélectionne tous les descendants para du noeud contextuel et le noeud contextuel lui-même si c'est un paraself::para
sélectionne le noeud contextuel si c'est un élément para, et rien dans le cas contrairechild::chapter/descendant::para
sélectionne les descendants para de l'element chapitre enfant du noeud contextuelchild::*/child::para
sélectionne tous les petits enfants para du noeud contextuel/
sélectionne la racine du document (qui est toujours le parent de l'élément document)/descendant::para
sélectionne tous les éléments para descendants du document contenant le noeud contextuel/descendant::olist/child::item
sélectionne tous les éléments item qui ont un parent olist et qui sont dans le même document que le noeud contextuelchild::para[position()=1]
sélectionne le premier enfant para du noeud contextuelchild::para[position()=last()]
sélectionne le dernier enfant para du noeud contextuelchild::para[position()=last()-1]
sélectionne l'avant dernier para enfant du noeud contextuelchild::para[position()>1]
sélectionne tous les enfants para du noeud contextuel autres que le premierfollowing-sibling::chapter[position()=1]
sélectionne le prochain chapter cible du noeud contextuelpreceding-sibling::chapter[position()=1]
sélectionne le précédent chapter cible du noeud contextuel/descendant::figure[position()=42]
sélectionne le 42ième élément figure du document/child::doc/child::chapter[position()=5]/child::section[position()=2]
sélectionne la 2ième section du 5ième élément chapter de l'élément doc du documentchild::para[attribute::type="warning"]
sélectionne tous les enfants para du noeud contextuel qui ont un attribut type dont la valeur est warningchild::para[attribute::type='warning'][position()=5]
sélectionne le 5ième enfant para du noeud contextuel qui a un attribut type dont la valeur est warningchild::para[position()=5][attribute::type="warning"]
sélectionne le 5ième enfant para du noeud contextuel si celui-là a un attribut type de valeur warningchild::chapter[child::title='Introduction']
sélectionne l'enfant chapter du noeud contextuel qui a un ou plus enfant title avec un contenu textuel égal à 'Introduction'child::chapter[child::title]
sélectionne l'enfant chapter du noeud contextuel qui a un ou plus enfant titlechild::*[self::chapter or self::appendix]
sélectionne tous les enfants chapter et appendix du noeud contextuelchild::*[self::chapter or self::appendix][position()=last()]
sélectionne le dernier enfant chapter ou appendix du noeud contextuel
Les fonctions
http://www.w3schools.com/XPath/xpath_functions.asp
- Fonctions sur les ensembles de noeuds
number last()
number position()
number count(node-set)
node-set id(object)
string local-name(node-set?)
Si l'argument est omis, la valeur par défaut utilisée par la fonction est un ensemble de noeuds réduit au seul noeud contextuel.
Exemple : listitem/*[1][local-name()='para' or local-name()='simpara' or local-name()='formalpara']
string namespace-uri(node-set?)
string name(node-set?)
- Fonctions sur les chaînes
string string(object?)
string concat(string,string,string*)
boolean starts-with(string,string)
boolean contains(string,string)
string substring-before(string, string)
Par exemple, substring-before("1999/04/01","/") retourne 1999.
string substring-after(string, string)*
Par exemple, substring-after("1999/04/01","/") retourne 04/01, et substring-after("1999/04/01","19") retourne 99/04/01.
string substring(string, number, number?)
Les exemples suivants illustrent différents cas de figures courants : substring("12345", 1.5, 2.6) retourne "234" substring("12345", 0, 3) retourne "12" substring("12345", 0 div 0, 3) retourne "" substring("12345", 1, 0 div 0) retourne "" substring("12345", -42, 1 div 0) retourne "12345" substring("12345", -1 div 0, 1 div 0) retourne ""
number string-length(string?)
string normalize-space(string?)
string translate(string, string, string)
La fonction translate retourne la première chaîne de caractères passée en argument dans laquelle les occurrences des caractères de la deuxième chaîne sont remplacées par les caractères correspondant aux mêmes positions de la troisième chaîne. Par exemple, translate("bar","abc","ABC") retourne la chaîne BAr. Si l'un des caractères du deuxième argument n'a pas de position correspondante dans le troisième (parce que le deuxième argument est plus long que le troisième), alors les occurrences de ce caractère sont supprimées du premier argument. Par exemple, translate("--aaa--","abc-","ABC") retourne "AAA". Si un caractère apparaît plus d'une fois dans la deuxième chaîne, alors c'est la première occurence de ce caractère qui détermine la règle de transformation. Si la chaîne passée en troisième argument est plus longue que la deuxième, alors, les caractères en trop sont ignorés.
- Fonctions booléennes
boolean not(object)
boolean lang(string)
- Fonctions numériques
number(object?)
number sum(node-set)
number floor(number)
number ceiling(number)
number round(number)