如何检查曾祖父是否有包含某些单词的class属性?

时间:2015-01-21 13:58:11

标签: html xpath

我有一个像这样的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')]]

但它不起作用!有人可以帮帮我吗?

3 个答案:

答案 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')]