|
XPath - Chemins de localisation (exemples) |
Considérons l'exemple suivant :
<?xml version="1.0" encoding="UTF-8"?>
<document>
<en-tete>
<titre> XML :
présentation </titre>
<résumé>
Ce document présente, bla bla.</résumé>
</en-tete>
<chapitre titre="Introduction">
<section niveau="1"
titre="Historique">
De
tous temps, <acronyme>XML</acronyme>, blabla
</section>
<section niveau="1"
titre="Généralités">
En
général, ...
</section>
</chapitre>
<chapitre titre="Technos assosiées">
<paragraphe>Dans
ce chapitre, ...</paragraphe>
<section niveau="1"
titre="Technos assosiées">
<paragraphe>
Nous
allons ici présenter des technologies associoées à
<acronyme>XML</acronyme>
</paragraphe>
<section
niveau="2" titre="XPath">
<acronyme>Xpath</acronyme>
est un langage pour adresser des parties de document
<acronyme>XML</acronyme>...
</section>
<section
niveau="2" titre="XSLT">
<acronyme>XSLT</acronyme>
est un langage de transformation d'arbres
<acronyme>XML</acronyme>...
</section>
</section>
<section niveau="1"
titre="Perspectives">En guise de conclusion...</section>
</chapitre>
</document>
L'arbre correspondant est :
Expression XPath |
Forme contractée |
Nodeset |
toutes les sections |
I |
/descendant::section |
//section |
6, 11, 16, 21, 28, 32 |
|
toutes les sections filles des éléments
chapitres |
II |
/descendant::chapitre/section |
//chapitre/section |
6, 11, 16, 30 |
|
toutes les sections contenant un paragraphe
comme enfant direct |
III |
/descendant::paragraphe/parent::section |
//section[paragraphe] |
16 |
|
toutes les éléments contenant
un paragraphe comme enfant direct |
IV |
/descendant::paragraphe/parent::* |
//paragraphe/.. |
13, 16 |
|
les parties de textes à gauche
d'un acronyme |
V |
/descendant::acronyme/preceding-sibling::text () |
//acronyme/preceding-sibling::text() |
7, 18, 22, 25 |
|
les titres des éléments
contenant de manière directe un acronyme |
VI |
/descendant::acronyme/parent::*/attribute::titre |
//acronyme/../@titre |
C, J, L |
|
Remarques
- Un nodeset n'est pas nécessairement homogène. Par
exemple, le nodeset IV contient un élément chapitre
et un élément section.
- La relation entre un élément E et un de ses attributs
A n'est pas symétrique : le parent de A est E mais A ne
figure pas parmi les enfants de E. L'expression //section/section/following-sibling::*
désigne la section représentée par l'élément
28.
L'expression //section/section/following-sibling::*/attribute::titre
désigne l'attribut K (de valeur XSLT)
et l'expression //section/section/following-sibling::*/attribute::titre/parent::*
désigne bien à nouveau le noeud 28.
Par contre, l'attribut K ne figure pas parmi le nodeset désigné
par //section/section/following-sibling::*/child::node()
(composé des noeuds 22, 23, 25 et 26).
|
|