Html 如何检查曾祖父是否有包含单词的class属性?
我有如下html代码: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(
<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()
。只回答了一半问题,已经有两个非常相似的答案,其中一个解释了为什么。/../../../
可能更昂贵。只回答了一半问题,已经有两个非常相似的答案,其中一个解释了为什么。/../../../
的成本可能更高。