如何在 XPath 中搜索 empty/void nodes/elements?

How to search for empty/void nodes/elements in XPath?

我有以下 XML 示例,我需要对其进行 XPath 查询 return node1node3 .

<root>
    <node1 />
    <node2 anyAttribute="anyText" />
    <node3> </node3>
    <node4>anyText</node4>
    <node5>
        <anyChildNode />
    </node5>
</root>

换句话说,一个 XPath 查询 return 具有(同时)的所有节点:

  1. 无属性
  2. 没有子节点
  3. 无内容或只有空白内容

我找到了一些解决方案 (1 & 2),但一次只适用于以上几点之一:

是的,我知道,我可以同时使用上面的 3 种变体,但我想避免使用它,而且我认为对于只搜索空的 nodes/elements 应该有一个简单的方法,或者?


我在 .NET 上也仅限于 xPath 1.0,因为 there is no progress 支持较新的版本。

这个 XPath,

/root/*[not(@* or * or text()[normalize-space()])]

将 select 根据要求仅 node1node3

解释: Select 所有 元素 (注意与 节点 的区别) root 的所有子元素没有属于属性的子元素(@*) 或元素 (*) 或非空白文本 (text()[normalize-space()]).