如何在 XPath 中搜索 empty/void nodes/elements?
How to search for empty/void nodes/elements in XPath?
我有以下 XML 示例,我需要对其进行 XPath 查询 return 仅 node1
和 node3
.
<root>
<node1 />
<node2 anyAttribute="anyText" />
<node3> </node3>
<node4>anyText</node4>
<node5>
<anyChildNode />
</node5>
</root>
换句话说,一个 XPath 查询 return 具有(同时)的所有节点:
- 无属性
- 没有子节点
- 无内容或只有空白内容
我找到了一些解决方案 (1 & 2),但一次只适用于以上几点之一:
- 对于 1。
/root/node()[not(node())]
- 经过测试并且有效
- for 2.
/root/node()[not(@*)]
- 测试有效
- 3。
/root/node()[string-length(normalize-space(text())) = 0]
- 不工作(不知道为什么)
是的,我知道,我可以同时使用上面的 3 种变体,但我想避免使用它,而且我认为对于只搜索空的 nodes/elements 应该有一个简单的方法,或者?
我在 .NET
上也仅限于 xPath 1.0
,因为 there is no progress 支持较新的版本。
这个 XPath,
/root/*[not(@* or * or text()[normalize-space()])]
将 select 根据要求仅 node1
和 node3
。
解释:
Select 所有 元素 (注意与 节点 的区别) root
的所有子元素没有属于属性的子元素(@*
) 或元素 (*
) 或非空白文本 (text()[normalize-space()]
).
我有以下 XML 示例,我需要对其进行 XPath 查询 return 仅 node1
和 node3
.
<root>
<node1 />
<node2 anyAttribute="anyText" />
<node3> </node3>
<node4>anyText</node4>
<node5>
<anyChildNode />
</node5>
</root>
换句话说,一个 XPath 查询 return 具有(同时)的所有节点:
- 无属性
- 没有子节点
- 无内容或只有空白内容
我找到了一些解决方案 (1 & 2),但一次只适用于以上几点之一:
- 对于 1。
/root/node()[not(node())]
- 经过测试并且有效 - for 2.
/root/node()[not(@*)]
- 测试有效 - 3。
/root/node()[string-length(normalize-space(text())) = 0]
- 不工作(不知道为什么)
是的,我知道,我可以同时使用上面的 3 种变体,但我想避免使用它,而且我认为对于只搜索空的 nodes/elements 应该有一个简单的方法,或者?
我在 .NET
上也仅限于 xPath 1.0
,因为 there is no progress 支持较新的版本。
这个 XPath,
/root/*[not(@* or * or text()[normalize-space()])]
将 select 根据要求仅 node1
和 node3
。
解释:
Select 所有 元素 (注意与 节点 的区别) root
的所有子元素没有属于属性的子元素(@*
) 或元素 (*
) 或非空白文本 (text()[normalize-space()]
).