Bonjour à tous ; je vous soumet un p'tit pb qui ne nous paraissait pas devoir poser de pb...
Nous souhaitons extraire d'un arbre tous les éléments dont le nom est "par", exclusion faite de ceux qui auraient comme ancêtre un élément nommé "tab".
Voici l'expression que nous avons bricolée mais qui n'exclue pas les enfants de "tab" :
Je précise une petite chose curieuse ; nous avons bien sûr commencé par écrire "//par[...]", mais même "//par" ne nous renvoyait rien (!) ; probablement un pb de namespace, mais nous ne préférons pas les préciser car ils ne dépendent pas de nous et les alias peuvent changer.
Code : Sélectionner tout - Visualiser dans une fenêtre à part //*[name()='par' and not(ancestor::*[name()='tab'])]
Et un arbre type :
Résultat attendu : une liste contenant 3 nœuds "par" avec les id 1, 4 & 5
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 <e1> <par id="1" /> <tab> <par id="2" /> <par id="3" /> </tab> <e2> <par id="4" /> </e2> <par id="5"> <tab> <par id="6" /> <par id="7" /> </tab> </par> </e1>
Si quelqu'un pouvait me remettre dans le droit chemin, je lui en serais bien reconnaissant ! Merci d'avance.
Partager