Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Html 如何检查曾祖父是否有包含单词的class属性?_Html_Xpath - Fatal编程技术网

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

Html 如何检查曾祖父是否有包含单词的class属性?,html,xpath,Html,Xpath,我有如下html代码: <div class='one two three and etc.'> <div> <div> <div class='my_target'> </div> </div> </div> </div> //div[../../../[contains(

我有如下html代码:

<div  class='one two three and etc.'>
    <div>
           <div>
                <div class='my_target'>
               </div>
            </div>
    </div>
</div>
//div[../../../[contains(@class,'two')]]

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

最好从另一个方向来解决这个问题。使用以下表达式:

//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>

感谢Phrogz的建议。

最好从另一个方向来解决问题。使用以下表达式:

//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>

感谢Phrogz的建议。

你很接近了。您需要使用以下选项:

//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 ')]

你很接近。您需要使用以下选项:

//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 ')]
试一试

或仅获取
class=“my_target”
元素

//div[contains(@class,'my_target') and contains(../../../@class,'two')]
试一试

或仅获取
class=“my_target”
元素

//div[contains(@class,'my_target') and contains(../../../@class,'two')]

伟大的你的表情很有效。谢谢你的帮助@MathiasMuller@AlexRixon不客气。请不要忘记接受答案,她和我的答案都是正确的,选择权在你。谢谢是的,他们是正确的,但你先回答了,所以我接受你的回答)谢谢你的评论@Phrogz。我会记住的,太好了!你的表情很有效。谢谢你的帮助@MathiasMuller@AlexRixon不客气。请不要忘记接受答案,她和我的答案都是正确的,选择权在你。谢谢是的,他们是正确的,但你先回答了,所以我接受你的回答)谢谢你的评论@Phrogz。我会记住的,我从来没有见过这样的表达方式,而且很有效。感谢您的回答,请注意这将不正确地匹配
class=“two-fold”
;使用XPath匹配空格分隔列表中的单词的标准方法是to,例如
contains(concat(“”,@class'),'two')
@Phrogz,非常正确。我通常对此更为勤奋,但我想我昨天没有参加比赛要完全正确,您还需要一个
normalize-space()
。我从未见过这样的表达式,它可以工作。感谢您的回答,请注意这将不正确地匹配
class=“two-fold”
;使用XPath匹配空格分隔列表中的单词的标准方法是to,例如
contains(concat(“”,@class'),'two')
@Phrogz,非常正确。我通常对此更为勤奋,但我想我昨天没有参加比赛要完全正确,您还需要一个
normalize-space()
。只回答了一半问题,已经有两个非常相似的答案,其中一个解释了为什么
。/../../../
可能更昂贵。只回答了一半问题,已经有两个非常相似的答案,其中一个解释了为什么
。/../../../
的成本可能更高。