如何使用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
很有帮助..
我正在添加此XSLT答案,因为似乎Google的前匹配缺乏这样的解决方案:
在将CDATA提取为XML的漫长斗争之后,最终,这种表达最适合我:
<xsl:template match="*[not(child::*)]/text()">
不隶属于 StackOverflow