如何使用XPath表达式选择所有叶节点?

new*_*man 41 syntax xpath selectnodes

我相信这是可能的,但无法弄清楚语法.像这样的东西:

xmlNode.SelectNodes("//*[count(child::*) <= 1]")
Run Code Online (Sandbox Code Playgroud)

但这不正确.

Dim*_*hev 56

用途:

//node()[not(node())]
Run Code Online (Sandbox Code Playgroud)

如果只需要元素叶节点(这需要澄清 - 是非元素子元素被认为是叶节点的元素吗?),那么下面的XPath表达式选择它们:

//*[not(*)]
Run Code Online (Sandbox Code Playgroud)

上面的两个表达式可能是选择所需节点(任意节点或元素 - 叶节点)的最短表达式.

  • `not(*)`表示"没有任何元素子元素"作为"*选择上下文节点的所有元素子元素"按照W3C XPath 1.0建议:http://www.w3.org/TR/xpath/# path-abbrev(第二个子弹).这是一个非常简短的解释,为了深入,在XPath中需要一个或多或少的完整课程.我可以无耻地推荐关于"XSLT 2.0和1.0基础"的Pluralsight培训课程的第二个模块吗?本课程的标题是"XPath中的速成课程",长达70分钟:http://www.pluralsight.com/training/Courses/TableOfContents/xslt-foundations-part1 (4认同)

kev*_*pie 25

任何没有元素子元素的元素

//*[not(child::*)]
Run Code Online (Sandbox Code Playgroud)

  • +1正确答案.但它意味着:*任何没有元素子元素*的元素.因此,它将选择具有文本节点子元素,空元素,具有混合内容的元素(文本节点,PI,注释)的元素 (3认同)