web-dev-qa-db-ja.com

XPath式を使用してすべてのリーフノードを選択する方法

それは可能だと思いますが、構文を理解できませんでした。このようなもの:

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

しかし、これは正しくありません。

42
newman

使用

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

elementリーフノードのみが必要な場合(そしてこれには説明が必要です-非エレメントの子を持つエレメントはリーフノードと見なされますか?) XPath式はそれらを選択します。

//*[not(*)]

上記の両方の式はおそらく最短です目的のノード(任意のノードまたは要素-リーフノード)を選択します。

58

子要素のない要素

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

なぜ1に等しいかまたは等しい

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

このサイトでテストなどを行う http://www.whitebeam.org/library/guide/TechNotes/xpathtestbed.rhtm

かなり役に立ちました.

2

グーグルのフロントマッチにはそのような解決策がないようですので、私はこのXSLTの答えを追加しています:

CDATAをXMLとして抽出することに長い間苦労した後、結局、この表現は私にとって最もうまくいきました。

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