
Envoyé par
tiscars
En particulier ce qui me dérange vraiment beaucoup c 'est l utilisation du generate-id() ...je ne vois pas bien en quoi il peut servir pour le tri.
generate-id() renvoie un id unique (deux noeuds de la même source XML ne peuvent pas avoir le même id) désignant le noeud passé en paramètre. On utilise generate-id() le plus fréquemment (en tout cas je ne ne lui connais pas beaucoup d'autres utilisations) pour vérifier si deux noeuds renvoyés par des expressions XPath différentes désignent en fait le même noeud.
Dans l'exemple que je t'ai donné, le traitement des éléments <texte> se fait de la manière suivante :
<xsl:apply-templates select="following-sibling::texte[generate-id(preceding-sibling::section[1]) = generate-id(current())]"/>
Décomposons la requête XPath :
- On part d'un élément <section>, le noeud courant
- On sélectionne tous les éléments <texte> frères du noeud courant, jusqu'à la fin de la source XML ; on ne veut cependant que les noeuds <texte> compris entre le noeud courant et le noeud <section> suivant, c'est ce que le prédicat qui suit va nous permettre d'établir
- Dans la liste des noeuds <texte> sélectionnés précedemment, on ne va retenir que ceux dont l'id attribué à la première section les précédant est le même que celui du noeud courant (il s'agit donc du même noeud). Ca va donc exclure tous les noeuds <texte> qui suivent le premier noeud <section> venant après le noeud courant (qui est un <section>, je le rappelle), puisque les id de ces <section> sont différents.
C'est plus clair comme cela ?
Partager