仅选择存在子元素的节点的Xpath?

15
这应该很简单,但它让我头疼。 给定以下结构:
<root>
  <a>
    <b/>
  </a>
  <a/>
</root>

我正在尝试制定一个xpath表达式,以仅返回非空的"a"元素,即那些具有子元素的元素。因此,我想返回第一个"a"实例,但不是第二个。

到目前为止,我有"/root/a/self::*",但这会将两个a都返回。


2
我也发现这个可以用:/root/a[child::*]但我会给Adrian一个同样可行的答案点赞! :) - Kevin Pauli
3个回答

15
/root/a[count(*)&gt;0]

将返回带有任何类型子节点的任何 'a' 节点


5
额外说明一下,您可以使用 count(b) 来具体指定想要计数的子节点。 - pb.

8
/root/a[count(*)>0]

3
只有当你想把它放到一个XML文件中(例如XSLT脚本)时才需要这样做。但是,那只是一个存储细节,我很确定XPath规范使用“>” :) - Torsten Marek

5

这个有效

/root/a[*]

甚至连

都可以


//a[*]

2
或者如果您只关心名称为“b”的子元素:/root/a[b] - Timothy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接