2009-07-17 10 views
11

Cela devrait être facile, mais cela me cause des problèmes. Compte tenu de cette structure:Xpath pour sélectionner uniquement les nœuds où des éléments enfants existent?

<root> 
    <a> 
    <b/> 
    </a> 
    <a/> 
</root> 

Je suis en train de formuler une expression XPath qui ne donne que les éléments non vides « a », à savoir ceux qui ont des éléments de l'enfant. Par conséquent, je souhaite que la première instance de "a" soit renvoyée, mais pas la seconde. Jusqu'à présent, j'ai "/ root/a/self :: *" mais cela me revient à la fois.

+2

J'ai aussi trouvé que cette fonctionne: /root/a [enfant :: *] Mais je vais donner Adrian crédit pour une réponse qui fonctionne aussi! :) –

Répondre

12
/root/a[count(*)&gt;0] 

donnera tout 'un' nœud avec tout type de nœud enfant

+5

Juste comme un point supplémentaire, vous pouvez utiliser count (b) pour être précis sur les nœuds enfants que vous voulez compter. –

6
/root/a[count(*)>0] 
+0

Je pense que Adrian a raison sur le besoin d'encodage. –

+3

Seulement si vous voulez le mettre dans un fichier XML (par exemple un script XSLT). Pourtant, c'est juste un détail de stockage, je suis assez sûr que la spécification XPath utilise ">" :) –

3

Celui-ci fonctionne

/root/a[*] 

ou même

//a[*] 
+0

Ou si vous vous souciez seulement des éléments enfants avec le nom "b": '/ root/a [b]' – Timothy

Questions connexes