XPath式を使用してすべてのリーフノードを選択する方法は?
-
30-09-2019 - |
質問
私はそれが可能だと信じていますが、構文を理解できませんでした。このようなもの:
xmlNode.SelectNodes("//*[count(child::*) <= 1]")
しかし、これは正しくありません。
解決
使用する:
//node()[not(node())]
場合にのみ エレメント 葉のノードは必要です(そしてこれには明確化が必要です - 非エレメントの子供が葉のノードと見なされる要素ですか?)、次のXPath式がそれらを選択します。
//*[not(*)]
上記の両方の表現は、おそらく最短です 目的のノード(任意のノードまたは要素 - 葉のノードのいずれか)を選択します。
他のヒント
要素の子供がない要素
//*[not(child::*)]
なぜそれ以下 または等しい 1に?
xmlNode.SelectNodes("//*[count(child::*) = 0]")
このサイトでテストなどを行います http://www.whitebeam.org/library/guide/technotes/xpathtestbed.rhtm
かなり役に立ちます。
Googleのフロントマッチにはそのような解決策がないようだからです。
XMLとしてCDATAを抽出することとの長い闘争の後、最終的に、この表現は私にとって最もよく機能しました。
<xsl:template match="*[not(child::*)]/text()">
所属していません StackOverflow