2008-12-12 9 views
26

Je souhaite sélectionner des nœuds pour lesquels un attribut spécifique n'existe pas. J'ai essayé la fonction Not(), mais cela ne fonctionne pas. Y a-t-il un moyen pour cela?Xpath requête pour sélectionner le nœud lorsque l'attribut n'existe pas?

Exemple: La requête XPath suivante:

group/msg[not(@owner)] 

Devrait récupérer le premier nœud, mais pas le 2e. Cependant, à la fois SketchPath (outil pour tester les requêtes Xpath) et mon code C# considèrent que les 2 nœuds sont ok.

<group> 
    <msg id="EVENTDATA_CCFLOADED_XMLCONTEXT" numericId="14026" translate="False" topicId="302" status="translated" > 
     <text>Context</text> 
     <comment></comment> 
    </msg> 
    <msg id="EVENTDATA_CCFLOADED_XMLCONTEXT_HELP" numericId="14027" translate="False" topicId="302" status="translated" owner="EVENTDATA_CCFLOADED_XMLCONTEXT" > 
     <text>Provides the new data displayed in the Object.</text> 
     <comment></comment> 
    </msg> 
</group> 

En fait, la fonction Non() fonctionne correctement, il est juste que j'avais d'autres conditions et les parenthèses n'étaient pas réglés correctement. errare humanum est.

+1

Si oui, s'il vous plaît FERMER la question - il est trompeur et prend du temps pour d'autres personnes. –

+0

J'ai fermé la question comme "n'est plus pertinent", si cela ne vous dérange pas. – PhiLho

+3

n'est pas 'group/msg [not (@owner) ou @ otherAttribute =" true "]' a travaillé pour vous? –

Répondre

17

Dans certains moteurs XPath anciens et pas très standard, j'ai dû utiliser string-length(@attr)=0 pour la même raison.

1

Fonctionne pour moi lors des tests avec XPath Explorer (basé sur Jaxen bibliothèque).
Donc je suppose que c'est en effet en fonction de l'implémentation XPath.

+1

Oui, j'ai appris un truc sur XPath, au moins ... :-) – PhiLho

Questions connexes