我有一个像这样的HTML代码:
<div class='one two three and etc.'>
<div>
<div>
<div class='my_target'>
</div>
</div>
</div>
</div>
我需要找到class="my_target"
的div,例如,曾祖父的班级包含一个单词“two”。我尝试了这样一个表达式:
//div[../../../[contains(@class,'two')]]
但它不起作用!有人可以帮帮我吗?
答案 0 :(得分:3)
你很亲密。你需要使用它:
//div[contains(@class, 'my_target'][contains(../../../@class,'two')]
请注意../../..
周围的括号以及该部分后面没有斜线。
或者因为只能有
但我会推荐这个替代方案:
//*[contains(@class, 'two')]/*/*/div[contains(@class, 'my_target')]
请注意它没有沿树下行并再次爬上去。
旁注:正如Phrogz正确指出的那样,更可靠的类名匹配是将class
属性和目标类名称包围在空格中:
//*[contains(concat(' ', normalize-space(@class), ' '), ' two ')]/*/*
/div[contains(concat(' ', normalize-space(@class), ' '), ' my_target ')]
答案 1 :(得分:1)
最好从另一个方向解决问题。使用以下表达式:
//div[contains(@class, 'two')]/*/*/div[@class = 'my_target']
表示
//div[contains(@class, 'two')] Select `div` elements anywhere in the document, if
their `class` attribute contains "two"
/*/*/div[@class = 'my_target'] look for any grand-grandchild named `div` whose
`class` attribute value is "my_target"
将返回
<div class="my_target"></div>
修改强>
如果有理由相信在其他不应匹配的情况下会出现“两个”(例如<div class='two-fold'/>
),那么请使用
contains( concat(' ', normalize-space(@class) ,' '), ' two ' )
感谢Phrogz的建议。
答案 2 :(得分:0)
尝试
//div[contains(../../../@class,'two')]
或仅获取class="my_target"
个元素
//div[contains(@class,'my_target') and contains(../../../@class,'two')]