【问题标题】:How do I use Xpath to locate parent node where a child node does not contain an attribute?如何使用 Xpath 定位子节点不包含属性的父节点?
【发布时间】:2019-12-10 02:33:49
【问题描述】:

使用 Xpath,如何在属性值列表中找到多个子元素都不包含特定属性值的父元素?

这是我的 xml 示例:

<app>
  <rdg wit="#R #W #I #S #C #O #D">existunt,</rdg>
  <rdg wit="#J">existant,</rdg>
</app>

我的 XML 有数百个这样的元素,它们都应该具有相同的一组八个属性值(#R 等),它们以不同的方式分布在两个或多个元素之间。但是其中一些缺少列表中的属性值,我需要找到这些节点。

所以我试图找到所有&lt;app&gt; 元素,其中&lt;rdg&gt; 元素中没有一个 包含#R。

我可以使用//app/rdg[contains(@wit,"#R")] 获得确实 包含#R 的那些,并且我知道有一个 not() 函数,但我还没有弄清楚如何让它们一起工作。

【问题讨论】:

  • 你试过了吗? //app/rdg[not(contains(@wit,"#R"))]
  • 我有,但它不起作用。这个 Xpath 找到所有没有 #R 的 &lt;rdg&gt; 元素。因此,在上面的示例中,它找到了&lt;rdg wit="#J"&gt;existant,&lt;/rdg&gt;,这不是我需要的。每个&lt;app&gt; 元素中至少有一个这样的行。我需要在其&lt;rdg&gt; 元素的any 中找到不包含#R 的每个&lt;app&gt; 元素,这意味着它需要完全跳过上面的示例&lt;app&gt;

标签: xml xpath


【解决方案1】:

您可以按如下方式完成此操作:

//app[not(rdg/@wit[contains(., '#R')])]

或者:

//app[not(rdg[contains(@wit, '#R')])]

这种稍微复杂的方法是必要的,因为apps 包含多个rdgs,所以我们基本上是在做(以第二个例子):

  • 选择所有apps 其中...
  • 没有rdg 孩子...
  • wit 属性包含#R

【讨论】:

    猜你喜欢
    • 2021-06-09
    • 1970-01-01
    • 2011-07-24
    • 1970-01-01
    • 1970-01-01
    • 2013-07-17
    • 2013-11-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多