|
XPath - Tests sur les noeuds |
Nous avons vu que la spécification
d'un chemin de localisation se faisait en trois étapes. L'application
de prédicats est facultative mais deux autres étapes sont
obligatoires. La syntaxe minimale est la suivante :
axe::test_noeud
En reprenant l'exemple précédent
et le même noeud contexte E,
l'expression
/I
désigne le noeud de type I, enfant du noeud contexte. Cette
écriture est en fait un raccourci pour ce qui devrait s'écrire
en toute rigueur :
/child::I
La partie à gauche du symbole ::
correspond à l'axe; la partie droite précise un test sur
le type de noeud (nodetest). Relativement
à E, si l'on veut sélectionner
tous les noeuds enfants (pas seulement les noeuds de type I),
on écrira :
/child::*
La notation synthétique étant beaucoup plus employée
que sa forme développée, on a souvent tendance à
perdre de vue la partie nodetest. Par exemple, l'ecriture ci-dessous,
E1/E2/*//Ei/
... /En
est en fait une contraction de :
child::E1/child::E2/child::*/descendant::Ei/
... /child::En
Sur l'exemple ci-contre, l'expression
/I/N/P
est une contraction de :
/child::I/child::N/child::P
|
 |
Reprenons la même structure d'arbre en changeant
le type des noeuds descendant de I
et en gardant E comme noeud contexte : |
|
|
Les noeuds en orange représentent le nodeset
sélectionné par les expressions ci-dessous : |
 |
|
/child::I/child::*
ou, sous forme contractée :
/I/*

les enfants du noeud I, lui-même enfant
du noeud contexte E
|
|
/child::I/child::Y
ou, sous forme contractée :
/I/Y

les noeuds de type Y, enfants du noeud I,
lui-même enfant du noeud contexte E
|
|
|
/child::I/descendant::*
ou, sous forme contractée :
/I//*

les descendants du noeud I, lui-même
enfant du noeud contexte E
|
|
/child::I/descendant::Y
ou, sous forme contractée :
/I//Y

les noeuds de type Y, descendants du noeud
I, lui-même enfant du noeud contexte E
|
Le nodetest permet également de restreindre le nodeset
aux commentaires ::comment(), aux noeuds
textes ::text() ,
etc.
|
|