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).

Précédent... ] Sommaire... ] Suivant... ]