2009-07-17 15 views
11

Dies sollte ein einfacher sein, aber es gibt mir Ärger. Aufgrund dieser Struktur:Xpath, um nur Knoten auszuwählen, auf denen untergeordnete Elemente existieren?

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

Ich versuche, einen XPath-Ausdruck zu formulieren, die nur die nicht-leer „a“ Elemente gibt, das heißt diejenigen, die Kind-Elemente haben. Daher möchte ich die erste Instanz von "a" zurückgegeben, aber nicht die zweite.

Bis jetzt habe ich "/ root/a/self :: *", aber das gibt mir beide ein's zurück.

+2

Ich fand auch, dass diese funktioniert: /root/a [Kind :: *] Aber ich gebe Adrian Kredit für eine Antwort, die auch funktioniert! :) –

Antwort

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

geben alle 'einen' Knoten mit jeder Art von Kindknoten

+5

Als zusätzlicher Punkt können Sie mit count (b) angeben, welche untergeordneten Knoten Sie zählen möchten. –

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

Ich denke, Adrian hat recht mit der Notwendigkeit der Codierung. –

+3

Nur wenn Sie es in eine XML-Datei (z. B. ein XSLT-Skript) einfügen möchten. Das ist nur ein Speicherdetail, ich bin mir ziemlich sicher, dass die XPath-Spezifikation ">" verwendet :) –

3

Dieses funktioniert

/root/a[*] 

oder sogar

//a[*] 
+0

Oder wenn Sie nur an untergeordneten Elementen mit dem Namen "b" interessiert sind: '/ root/a [b]' – Timothy

Verwandte Themen