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')]
我得到以下 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')]