2009-07-17 10 views
11

Questo dovrebbe essere facile ma mi dà problemi. Data questa struttura:Xpath per selezionare solo i nodi in cui sono presenti elementi figlio?

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

Sto cercando di formulare un'espressione XPath che dà solo elementi "a" il non vuoti, vale a dire quelli che hanno elementi figlio. Quindi voglio la prima istanza di "a" restituita, ma non la seconda.

Finora ho "/ root/a/self :: *" ma questo mi sta restituendo entrambe le a.

+2

Ho anche scoperto che questo works: /root/a [child :: *] Ma darò credito ad Adrian per una risposta che funziona anche! :) –

risposta

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

darà alcun 'un' nodo con qualsiasi tipo di nodo figlio

+5

Proprio come un punto in più, è possibile utilizzare count (b) per specificare quali nodi figlio si desidera contare. –

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

Penso che Adrian abbia ragione riguardo la necessità della codifica. –

+3

Solo se si desidera inserirlo in un file XML (ad esempio uno script XSLT). Tuttavia, questo è solo un dettaglio di archiviazione, sono abbastanza sicuro che la specifica XPath usi ">" :) –

3

Questo funziona

/root/a[*] 

o anche

//a[*] 
+0

Oppure se ti interessano solo gli elementi figlio con il nome "b": '/ root/a [b]' – Timothy

Problemi correlati