web-dev-qa-db-fra.com

Comment sélectionner tous les nœuds feuilles en utilisant l'expression XPath?

Je crois que c'est possible mais je n'ai pas pu comprendre la syntaxe. Quelque chose comme ça:

xmlNode.SelectNodes("//*[count(child::*) <= 1]")

mais ce n'est pas correct.

41
newman

Utilisation :

//node()[not(node())]

Si seuls les nœuds feuille element sont souhaités (et que cela nécessite une clarification - les éléments dont les enfants non-éléments sont-ils considérés comme des nœuds feuille?), L'expression XPath suivante les sélectionne:

//*[not(*)]

Les deux expressions ci-dessus sont probablement les plus courtes qui sélectionnent les nœuds souhaités (nœuds any-node ou noeuds élément-feuille).

56
Dimitre Novatchev

Tous les éléments sans enfant d'élément

//*[not(child::*)]
24
kevpie

J'ajoute cette réponse XSLT car il semble que les correspondances de google manquent d'une telle solution:

Après une longue lutte pour extraire CDATA au format XML, cette expression a finalement fonctionné de manière optimale pour moi:

<xsl:template match="*[not(child::*)]/text()">
0
IC4