Credo sia possibile ma non sono riuscito a capire la sintassi. Qualcosa del genere:Come selezionare tutti i nodi foglia utilizzando l'espressione XPath?
xmlNode.SelectNodes("//*[count(child::*) <= 1]")
ma questo non è corretto.
Credo sia possibile ma non sono riuscito a capire la sintassi. Qualcosa del genere:Come selezionare tutti i nodi foglia utilizzando l'espressione XPath?
xmlNode.SelectNodes("//*[count(child::*) <= 1]")
ma questo non è corretto.
Uso:
//node()[not(node())]
Nel caso in cui solo elemento nodi foglia sono ricercati (e questo ha bisogno di chiarimenti - sono elementi che hanno figli non elemento considerato nodi foglia?), Allora la seguente XPath espressione li seleziona:
//*[not(*)]
Entrambe le espressioni di cui sopra sono probabilmente il più breve che selezionare il desiderato nodi (qualsiasi nodo o elemento - nodi foglia).
Puoi spiegare perché funziona? Ho esaminato la sintassi XPath e alcuni tutorial, ma non riesco a capire perché funzioni. – rrs
@rrs: la prima espressione seleziona qualsiasi nodo nel documento XML che non ha figli - questo è ciò che un nodo foglia è - per definizione. Il secondo fa qualcosa di simile, ma seleziona qualsiasi elemento che non ha un elemento figlio. –
Capisco cosa fa, ma non come lo fa. Perché/come 'non (*)' seleziona nodi foglia/elementi? – rrs
Perché meno o uguale a a 1?
xmlNode.SelectNodes("//*[count(child::*) = 0]")
Fai test ecc in questo sito http://www.whitebeam.org/library/guide/TechNotes/xpathtestbed.rhtm
Abbastanza utile ..
e @miliu: il test di conteggio non è necessario. Controlla la risposta @kevpie. –
@ Alejandro, infatti .. –
Eventuali elementi con nessun bambino elemento
//*[not(child::*)]
Grazie mille. Funziona anche alla grande. – newman
+1 Risposta corretta.Ma significa: * qualsiasi elemento senza elemento figlio *. Quindi, selezionerà gli elementi con il nodo di testo figlio, elementi vuoti, elementi con contenuto misto (nodi di testo, PI, commenti) –
+1 @Alejandro, il chiarimento è apprezzato! – kevpie
Sto aggiungendo questa risposta XSLT poiché sembra che le partite anteriori di Google non abbiano una soluzione del genere:
Dopo una lunga lotta con l'estrazione di CDATA come XML, alla fine, questa espressione ha lavorato meglio per me:
<xsl:template match="*[not(child::*)]/text()">
Buona domanda, +1. Vedere la mia risposta per l'espressione XPath probabilmente più breve che seleziona esattamente tutti i nodi foglia. :) –