Come selezionare tutti i nodi foglia usando un'espressione XPath?
-
30-09-2019 - |
Domanda
Credo che sia possibile, ma non riuscivo a capire la sintassi. Qualcosa di simile a questo:
xmlNode.SelectNodes("//*[count(child::*) <= 1]")
, ma questo non è corretto.
Soluzione
Usa :
//node()[not(node())]
Nel caso in cui solo elemento nodi foglia sono voluto (e questo esigenze chiarimento - sono elementi che hanno figli non elemento considerato nodi foglia?), Allora la seguente espressione XPath seleziona loro:
//*[not(*)]
Entrambe le espressioni sopra sono probabilmente il più breve che seleziona i nodi desiderati (o qualsiasi nodo o elemento - nodi foglia).
Altri suggerimenti
Tutti gli elementi con nessun bambino elemento
//*[not(child::*)]
Perché meno o uguale per 1?
xmlNode.SelectNodes("//*[count(child::*) = 0]")
effettuare prove etc in questo sito http://www.whitebeam.org/ biblioteca / guida / note tecniche / xpathtestbed.rhtm
Piuttosto utile ..
Sto aggiungendo questa risposta XSLT poiché sembra partite anteriori di Google mancano di tale soluzione una:
Dopo una lunga lotta con l'estrazione di CDATA come XML, alla fine, questa espressione ha funzionato meglio per me:
<xsl:template match="*[not(child::*)]/text()">