2009-07-17 13 views
11

To powinno być łatwe, ale sprawia mi kłopoty. Ze względu na tę strukturę:Xpath, aby wybrać tylko węzły, w których istnieją elementy potomne?

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

próbuję sformułować wyrażenie XPath, które daje tylko niepustej „a” elementy, to znaczy te, które mają elementy podrzędne. Dlatego chcę zwrócić pierwszą instancję "a", ale nie drugą.

Do tej pory mam "/ root/a/self :: *", ale to jest zwrot mi obu.

+2

ja również, że ten działa: /root/a [child :: *] Ale dam adrianowi odpowiedź, która również działa! :) –

Odpowiedz

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

dadzą żadnej 'A' węzeł z wszelkiego rodzaju węzła potomnego

+5

Podobnie jak dodatkowy punkt, możesz użyć count (b), aby określić, które węzły potomne chcesz liczyć. –

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

Myślę, że Adrian ma rację co do potrzeby kodowania. –

+3

Tylko jeśli chcesz umieścić go w pliku XML (np. Skrypt XSLT). Mimo to, jest to tylko detal, jestem pewien, że specyfikacja XPath używa ">" :) –

3

Ten działa

/root/a[*] 

lub nawet

//a[*] 
+0

Lub jeśli zależy ci tylko na elementach potomnych o nazwie "b": '/ root/a [b]' – Timothy

Powiązane problemy