2010-05-18 5 views
-1

je le code suivant et je dois sélectionner tous les noeuds avec id = « text » mais pas les nœuds qui ont déjà un parent avec id = « text »:XPath sélectionner les balises par identifiant pas des descendants de

<fo:block id="text"> 
    test00 
    <fo:block id="text"> 
     test01 
    </fo:block> 
    <fo:block> 
     test02 
    </fo:block> 
</fo:block> 
<fo:block id="text"> 
    test03 
</fo:block> 

donc dans cet exemple la requête doit renvoyer uniquement les deux fo: block avec le contenu test00 et test03.

Merci.

+0

Et qu'avez-vous écrit jusqu'à maintenant? – Oded

+1

Semble invalide (!), Personne n'utilise l'attribut id comme "non unique"! ... Dans le meilleur des cas, nous pouvons dire que ce n'est pas une bonne pratique. –

Répondre

2

je partirais avec quelque chose comme ceci:

//fo:block[@id='text' and not(./*[@id='text'])] 

Je vais donner un test en ce moment pour vous assurer qu'il est sain d'esprit. Ouais. Il renvoie text00 et text03, selon les besoins. Alors permettez-moi d'expliquer cette expression.

//fo:block    # Select all fo:block elements in the document 
[ 
    @id='text' and  # Get only those whose id attribute's value is "text" 
    not(./*[@id='text']) # and whose children do not have id attributes equal to "text" 
] 
+0

merci beaucoup, vous étiez si rapide et maintenant vous êtes ma nouvelle idole !! – Stefano

Questions connexes