2011-03-08 3 views
1

Je dois prendre tous les "//ul/li[not(@*)][count(*)=0]" sauf ceux qui ont <div> parent. J'ai essayé "//not(div)/ul/li[not(@*)][count(*)=0]", mais malheureusement, cela ne fonctionne pas. Est-ce que quelqu'un sait, comment puis-je faire face à cela? Merci d'avance.Xpath: Exceptions dans la requête basée sur la valeur parente

+0

Bonne question, +1. Voir ma réponse pour l'expression XPath la plus courte qui sélectionne les nœuds voulus. :) –

Répondre

2

Je pense que vous avez besoin:

//ul[not(parent::div)]/li[not(@*|*)] 

Ou:

/descendant-or-self::node()[not(self:div)]/ul/li[not(@*|*)] 

deux sélectionne comme ul quand il est l'élément racine, aussi.

+0

Oui, c'est exactement ce que je cherche. –

+0

+1 pour une réponse correcte. – Flack

1

Utilisation:

//*[not(self::div)]/li[not(@*) and not(*)] 

qui peut être légèrement abrégé à l'équivalent:

//*[not(self::div)]/li[not(@*|*)] 
+0

+1 pour un concis. – Flack

+0

Malheureusement, 1) il a une erreur de parcage - je pense que c'est à cause de bracet manqué: pas '// * [pas (self :: div)]/li [not (@ *) et pas (*)] ' mais ' // * [not (self :: div)]/li [not (@ *) et not (*)] ' 2) avec cette expression corrigée j'ai un résultat indésirable –

+0

@CodeJunkie: Merci pour la bonne prise - J'ai corrigé les deux expressions et maintenant elles sont syntaxiquement correctes. Pour obtenir un résultat indésirable, pourriez-vous, s'il vous plaît, fournir le document XML le plus simple possible (en éditant votre question) sur lequel cela peut être démontré? Peut-être avez-vous mal exprimé vos exigences ou avez-vous manqué une exigence supplémentaire? –

Questions connexes