XPath

De Linuxmemo.

XPath est un langage pour adresser des parties de documents XML, conçu pour être utilisé à la fois par XSLT et XPointer.

refs: http://xmlfr.org/w3c/TR/xpath/ http://msdn.microsoft.com/fr-fr/library/ms256115%28v=vs.80%29.aspx

Tuto: https://codes-sources.commentcamarche.net/faq/536-xpath-le-language

Sommaire

[modifier] Contexte des expressions XPath

  • Contexte actuel

Une expression précédée d'un point et d'une barre oblique (./) utilise explicitement comme contexte le contexte actuel. Par exemple, l'expression suivante fait référence à tous les éléments <author> dans le contexte actuel :

./author
Notez que cette expression est équivalente à la suivante :
author
  • Racine du document

Une expression précédée d'une barre oblique (/) utilise comme contexte la racine de l'arborescence du document. Par exemple, l'expression suivante fait référence à l'élément <bookstore> à la racine de ce document :

/bookstore
  • Élément racine

Une expression qui utilise une barre oblique suivie d'un astérisque (/*) utilise comme contexte l'élément racine. Par exemple, l'expression suivante trouve l'élément racine du document :

/*
  • Descendant récursif

Une expression qui utilise une barre oblique double (//) indique une recherche qui inclut zéro, un ou plusieurs niveaux de hiérarchie. Lorsque cet opérateur apparaît au début du modèle, le contexte est relatif à la racine du document. Par exemple, l'expression suivante fait référence à tous les éléments <author> partout dans le document actuel :

//author

Le préfixe .// indique que le contexte commence au niveau de la hiérarchie indiqué par le contexte actuel.

  • Éléments spécifiques

Une expression qui commence par un nom d'élément fait référence à une requête de l'élément spécifique, à partir du nœud de contexte actuel. Par exemple, l'expression suivante fait référence à l'élément <background.jpg> à l'intérieur de l'élément <images> dans le nœud de contexte actuel :

images/background.jpg

L'expression suivante fait référence à l'ensemble d'éléments <book> à l'intérieur des éléments <bookstore> dans le nœud de contexte actuel :

bookstore/book

L'expression suivante fait référence à tous les éléments <first.name> dans le nœud de contexte actuel :

first.name

[modifier] Table de relation

self                 -> lui même
parent               -> parent (au dessus)
child                -> enfant (au dessous 1 niveau)
descendant           -> enfants (au dessous tout niveau)
descendant-or-self   -> enfants + lui même
ancestor             -> parents (au dessus jusqu’à root)
ancestor-or-self     -> lui même + parents (au dessus jusqu’à root)
preceding            -> même parent, autres branches, avant, tous niveaux
preceding-sibling    -> même parent, autres branches, avant, même niveau
following            -> même parent, autres branches, après, tous niveaux
following-sibling    -> même parent, autres branches, après, même niveau

[modifier] Opérateurs et caractères spéciaux

  • Les expressions XPath se construisent à l'aide des opérateurs et caractères spéciaux indiqués dans le tableau suivant.

/

Opérateur enfant ; sélectionne les enfants immédiats de la collection du côté gauche. Lorsque cet opérateur de chemin apparaît au début du modèle, il indique que les enfants doivent être sélectionnés dans le nœud racine.

//

Descendant récursif ; cherche l'élément spécifié à n'importe quelle profondeur. Lorsque cet opérateur de chemin apparaît au début du modèle, il indique un jambage descendant récursif à partir du nœud racine.

.

Indique le contexte actuel.

..

Le parent du nœud de contexte actuel.

*

Caractère générique ; sélectionne tous les éléments quel que soit leur nom.

@

Attribut ; préfixe d'un nom d'attribut.

@*

Caractère générique d'attribut ; sélectionne tous les attributs quel que soit leur nom.

:

Séparateur d'espace de noms ; sépare le préfixe d'espace de noms du nom de l'élément ou de l'attribut.

( )

Regroupe les opérations pour établir de manière explicite leur ordre de priorité.

[ ]

Applique un modèle de filtre.

[ ]

Opérateur d'indice ; utilisé pour l'indexation au sein d'une collection.

+

Effectue une addition.

-

Effectue une soustraction.

div

Effectue une division à virgule flottante selon IEEE 754.

*

Effectue une multiplication.

mod

Retourne le reste d'une division tronquée.

  • Le tableau suivant indique l'ordre des priorités (de la plus haute à la plus faible priorité).
Priorité Caractère But

1

( )

Regroupement

2

[ ]

Filtres

3

/ //

Opérations de chemin

  • Attributs

XPath désigne les noms d'attribut par le symbole @. Les attributs et éléments enfants sont traités de manière impartiale et les capacités sont équivalentes entre les deux types autant que possible.

  • Recherche de plusieurs attributs

Tous les attributs d'un élément peuvent être retournés à l'aide du préfixe @*. Cela peut être utile pour des applications qui traitent les attributs comme des champs d'un enregistrement.

[modifier] Ensembles XPath

Les collections retournées par des requêtes XPath conservent l'ordre, la hiérarchie et l'identité des documents, dans la mesure où ceux-ci sont définis. En d'autres termes, une collection d'éléments est retournée dans l'ordre du document, sans répétition d'éléments. Puisque, par définition, les attributs ne sont pas ordonnés, aucun ordre implicite n'existe dans les attributs retournés pour un élément spécifique.

La collection de tous les éléments ayant un certain nom de balise est exprimée par le nom même de la balise. On peut qualifier cela en montrant que les éléments sont sélectionnés dans le contexte actuel à l'aide d'un point et d'une barre oblique (./), mais le contexte actuel est utilisé par défaut et ne doit donc pas être noté explicitement.

[modifier] Filtres et modèles de filtre

Des contraintes et branchements peuvent être appliqués à n'importe quelle collection par l'ajout d'une clause de filtre, [modèle], à la collection. Le filtre est analogue à la clause SQL WHERE. Le filtre contient un modèle appelé le modèle de filtre. Le modèle de filtre est évalué en une valeur booléenne et testé pour chaque élément de la collection. Tous les éléments de la collection qui ne correspondent pas au modèle de filtre sont omis de la collection résultat.

Pour une question de commodité, si une collection est placée dans le filtre, un VRAI booléen est généré si la collection contient des membres et un FAUX est généré si elle est vide. Une expression telle que author/degree implique une fonction de conversion de collection vers booléen qui donne VRAI s'il existe un élément <author> avec un élément enfant appelé <degree>.

Notez qu'un nombre quelconque de filtres peuvent apparaître à un niveau donné d'une expression. Les filtres vides ne sont pas autorisés.

Les filtres sont toujours évalués par rapport à un contexte. Autrement dit, l'expression book[author] signifie que, pour tout élément <book> trouvé, il faut tester s'il possède un élément enfant <author>. De même, book[author = 'Bob'] signifie que, pour tout élément <book> trouvé, il faut tester s'il possède un élément enfant <author> dont la valeur est Bob. On peut aussi bien examiner la valeur du contexte en utilisant un point (.). Par exemple, book[. = 'Trenton'] signifie que, pour chaque livre trouvé dans le contexte actuel, il faut tester si sa valeur est Trenton.

             Expression
             Référence

book[excerpt]

Tous les éléments <book> qui contiennent au moins un élément enfant <excerpt>.

book[excerpt]/title

Tous les éléments <title> à l'intérieur d'éléments <book> qui contiennent au moins un élément <excerpt>.

book[excerpt]/author[degree]

Tous les éléments <author> qui contiennent au moins un élément <degree> et sont à l'intérieur d'éléments <book> contenant au moins un élément <excerpt>.

book[author/degree]

Tous les éléments <book> qui contiennent au moins un élément <author> avec au moins un élément enfant <degree>.

book[excerpt][title]

Tous les éléments <book> qui contiennent au moins un élément <excerpt> et au moins un élément <title>.

[modifier] Expressions booléennes, de comparaison et ensemblistes

             Opérateur
             Description

and

ET logique

or

OU logique

not()

Négation

=

Égalité

!=

Différence

&lt; *

Inférieur à

&lt;= *

Inférieur ou égal à

&gt; *

Supérieur à

&lt;= *

Supérieur ou égal à

|

Opération ensembliste : retourne l'union de deux collections de nœuds


Le tableau suivant indique l'ordre des priorités (de la plus haute à la plus faible) pour les opérateurs de comparaison et les opérateurs booléens.

1

( )

Regroupement

2

[ ]

Filtres

3

/

//

Opérations de chemin

4

<

ou

&lt;

<= ou &lt;=

>

ou

&gt;

>= ou &gt;=

Comparaisons

5

=

!=

Comparaisons

6

|

Union

7

not()

Opérateur booléen NOT

8

And

Opérateur booléen AND

9

Or

Opérateur booléen OR

[modifier] Expressions booléennes, de comparaison et ensemblistes

Outils personnels