<li class="amenities__item amenities__item--yes">
<div class="amenities__icon amenities__icon--yes"></div>
<div class="amenities__label">
Parking
</div>
</li>
我想抓住文字&#34;停车&#34;但是,只有在它之前的div有单词&#34; yes&#34;在里面。
我一直在尝试各种变体:
//div[contains(class/following-sibling::text(), 'Yes')]
但似乎我需要以某种方式更具体。
答案 0 :(得分:0)
这个XPath,
normalize-space(//div[contains(preceding-sibling::div[1]/@class, 'yes')])
将返回div
的空格规范化字符串值,其前一个兄弟div
的{{1}}属性值中包含yes
。对于您发布的示例HTML,将是:
@class
如果您希望测试前面的Parking
等于div
的字符串值,那么请使用此XPath:
Yes
更新以解决有关如何处理多个此类normalize-space(//div[preceding-sibling::div[1] = 'Yes'])
元素的评论问题
对于第一个XPath,您可以选择此类div
元素的节点集(XPath 1.0)或序列(XPath 2.0+):
div
迭代结果节点集/序列的方式取决于托管XPath库的语言。在XPath中,如果你知道你想要的第二个//div[contains(preceding-sibling::div[1]/@class, 'yes')]
,你可以追加div
:
[2]