如何只获取那些有直接子节点的节点?

编程语言 2026-07-11

我有如下的XML片段:

<Item>
  <Identifier>12345</Identifier>
  <Bin>
    <Check>
      <Number>1311</Number>
      <Level>Warning</Level>
    </Check>
  </Bin>
  <Check>
    <Number>1315</Number>
    <Level>Warning</Level>
  </Check>
  <Check>
    <Number>192</Number>
    <Level>Critical</Level>
  </Check>
</Item>

我正在尝试检索作为某个给定节点的直接子节点的 Check 节点。比如,在上述XML中,XPath查询 //Check[Level = "Warning"] 返回两个节点:编号为1311的 Check 节点,以及编号为1315的 Check 节点。

如何查询才能仅返回编号为1315的 Check 节点呢?我想让这个查询对具体的标签不敏感。基本上,对于任意给定的标签,返回那些直接拥有 Check 子节点的标签,但不要返回那些只是给定节点的子节点、同时又有自己的 Check 子节点的节点。我本以为 ./Check[Level = "Warning"] 只会返回该节点,但该查询却返回为空。

我的期望输出不应依赖于某个Check编号的值。我只想要所有作为 Item 节点的直接子节点且其 Level 为 "Warning" 的 Check 节点,但我不想要作为 Bin 节点子节点的那个 Check 节点,也不想要 Level 为 "Critical" 的 Check 节点。此外,除了 Item 之外还有其他标签,所以这个查询也需要与标签无关地编写。我希望这个查询类似于 //Check[Level = "Warning"] 的查询,但 //Check[Level = "Warning"] 只返回 Item 的直接子节点。

非常感谢您对这个问题提供的任何见解。

解决方案

/*/Check[Level="Warning"]

你使用的 ./Check[Level="Warning"] 的XPath在上下文为根节点时返回空结果。你少走了一步。

站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章