Comment sélectionner tous les nœuds de feuilles en utilisant l'expression XPath?
-
30-09-2019 - |
Question
Je crois qu'il est possible, mais ne pouvait pas comprendre la syntaxe. Quelque chose comme ceci:
xmlNode.SelectNodes("//*[count(child::*) <= 1]")
mais ce n'est pas correct.
La solution
Utilisez :
//node()[not(node())]
Dans le cas seulement élément nœuds feuilles sont recherchés (et ce besoin de clarification - sont des éléments qui ont des enfants non-éléments considérés comme des noeuds feuilles?), Puis les sélectionne d'expression XPath les suivant:
//*[not(*)]
Les deux expressions ci-dessus sont probablement les plus brefs que sélectionner les noeuds souhaités (soit tout-noeud ou élément - nœuds de feuilles).
Autres conseils
Les éléments sans élément enfant
//*[not(child::*)]
Pourquoi moins ou égal à 1?
xmlNode.SelectNodes("//*[count(child::*) = 0]")
Faire des tests etc sur ce site http://www.whitebeam.org/ bibliothèque / Guide / TechNotes / xpathtestbed.rhtm
Assez utile ..
J'ajoute cette réponse XSLT car il semble matchs avant de Google ne disposent pas d'une telle solution:
Après une longue lutte avec extraction CDATA comme XML, par la suite, cette expression fonctionne le mieux pour moi:
<xsl:template match="*[not(child::*)]/text()">