Select 个节点包含一个 class 个包含 X 的子节点

Select nodes containing a child with a class that contains X

我得到以下 XML:

  <a> 
    <div class="from ng-binding">Stranger</div>  
    <div class="subject ng-binding">Hello there</div>  
    <div class="time ng-binding"</div> 
  </a>

我正在尝试 select 有子标签的 a 标签 class 包含 "subject"(所以基本上是这个例子的 a 标签)。

我试过以下方法:

//a[contains(.//div/@class,'subject')]

但它没有 select 任何东西。 我将其更改为 //a[contains(.//div/@class,'from')] 并且有效,所以我不明白问题是什么。 不应该 .// 检查节点的所有子节点吗?

你想要

//a[.//div[contains(@class, 'subject')]]

contains() 函数只接受第一个参数中的第一项,因此如果您将 .//div/@class 作为第一个参数传递给 contains(),您将只测试 [的第一个结果=12=] 而不是测试所有这些。

换句话说,您尝试的代码本质上等同于

//a[contains((.//div/@class)[1],'subject')]