2009-07-08 9 views

Répondre

2
<element> 
    <a/> 
    <b/> 
</element> 

element[child::a][child::b] 

Ceci devrait sélectionner tous les éléments avec a et b comme enfants directs, qu'ils aient des enfants supplémentaires ou non. Ou, plus simplement:

element[a][b] 

... Je pense.

1

Quelque chose comme ça devrait le faire: // [a et b]

+0

Voulez-vous rechercher spécifiquement les nœuds parents nommés «parent» ou trouver un nœud avec un élément enfant «a» et «b»? –

0
//parent[count(a) > 0 and count(b) > 0] 

devrait le faire. Il y a un grand XPath testbed here qui rend la vie très facile, en termes de mettent en lumière les nœuds appariés etc.

+0

qui devrait être parent :: * [count (a)> 0 et count (b)> 0], n'est-ce pas? –

+0

@Brian Agnew: non, vous avez raison - je confondais un élément nommé "parent" et l'axe parent :: xpath. Mea culpa. –

+0

C'est bon :-) Merci pour les commentaires –

1
//*[child::a and child::b] 
1

Obvious:

parent[a and b] 

L'axe de l'enfant est implicite dans les prédicats, cela signifie qu'il n'y a pas besoin de le mentionner.

parent[child::a and child::b] <!-- the same, only longer --> 

L'utilisation de deux prédicats distincts est possible aussi longtemps que les conditions sont conjonctives ("et"):

parent[a][b] <!-- the same, slightly shorter --> 

Cela permet d'économiser trois caractères d'expression. Cependant, l'utilisation de deux prédicats déclenche deux vérifications distinctes, puisqu'elles sont appliquées l'une après l'autre. En utilisant un prédicat avec un opérateur booléen semble être l'approche la plus simple et la plus propre à moi.

Questions connexes