2008-12-12 8 views
26

Ich möchte Knoten auswählen, für die ein bestimmtes Attribut nicht existiert. Ich habe die Not() Funktion versucht, aber es funktioniert nicht. Gibt es einen Weg dafür?Xpath-Abfrage zum Auswählen eines Knotens, wenn das Attribut nicht existiert?

Beispiel: Die folgende XPath-Abfrage:

group/msg[not(@owner)] 

Sollte der erste Knoten abrufen, aber nicht die zweite ein. Sowohl SketchPath (Tool zum Testen von Xpath-Abfragen) als auch mein C# -Code berücksichtigen jedoch, dass die 2 Knoten in Ordnung sind.

<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> 

korrekt In der Tat arbeitet die Not() Funktion, es ist nur, dass ich richtig andere Bedingungen und Klammern wurden nicht festgelegt hatte. errare humanum.

+1

Wenn ja, bitte SCHLIESSEN Sie die Frage - es ist irreführend und zeitaufwendig für andere Menschen. –

+0

Ich schloss die Frage als "nicht mehr relevant", wenn es Ihnen nichts ausmacht. – PhiLho

+3

funktioniert nicht 'group/msg [nicht (@owner) oder @ otherAttribute =" true "]' für dich? –

Antwort

17

In einigen alten und nicht sehr Standard XPath-Engine musste ich string-length(@attr)=0 aus dem gleichen Grund verwenden.

1

Funktioniert für mich beim Testen mit XPath Explorer (basierend auf Jaxen Bibliothek).
Also ich denke, es ist in der Tat abhängig von der XPath-Implementierung.

+1

Ja, ich habe einen Trick auf XPath gelernt, zumindest ... :-) – PhiLho

Verwandte Themen