【发布时间】:2015-08-05 17:03:37
【问题描述】:
我正在尝试选择一个带有 class 属性的 div,该属性包含多个空格和换行符。下面是一个片段。我想选择所有带有test-one 和topit 的div 的样子:
<div class="test-one
topit
">
<div class='test-one a'>1
</div>
<div class='topit'>2
</div>
</div>
<div class="test-one
topit
">
<div class='test-one a'>1
</div>
<div class='topit'>2
</div>
</div>
这是我尝试过的:
"//div[contains(concat(' ', normalize-space(@class), ' '), ' topranks ') and contains(concat(' ', normalize-space(@class), ' ), ' list-node ')]"
和
//*[contains(concat(' ', normalize-space(@class), ' '), ' atag ')]
我尝试改进的来源:
XPath - How to select by @text that contains new line
和
How can I match on an attribute that contains a certain string?
【问题讨论】:
-
您提供的 XPath 表达式有效:
//div[contains(concat(' ', normalize-space(@class), ' '), ' topit ') and contains(concat(' ', normalize-space(@class), ' '), ' test-one ')](当然,您提供的表达式是topranks而不是topit和list-node而不是test-one,但我猜你在测试时改变了它们——如果你没有改变,那就去吧)。 -
@unutbu 和 @acdcjunior 谢谢,它似乎可以工作,但在实际站点上却没有。原始 css 类 名称是
list-node和topranks。这是链接[链接]made-in-china.com/… -
吉德,你的问题是什么?可以推断出一个问题,例如“我尝试过的方法不起作用。我怎样才能让它起作用?”如果这是您的问题,请告诉我们您尝试显示的 XPath 表达式时实际发生了什么。有错误吗?它没有选择任何东西吗?东西太多?做错事了?你怎么知道结果是什么?
-
@JideKoso 我坚持。您提供的 XPath 有效。我刚刚在您提供的网站上进行了尝试,并且可以正常工作。好吧,我不得不添加一个缺失的报价,但在那之后,它起作用了。试试看:
//div[contains(concat(' ', normalize-space(@class), ' '), ' topranks ') and contains(concat(' ', normalize-space(@class), ' '), ' list-node ')]-- 请注意我关闭了' <QUOTE HERE>), ' list-node ')]中的引用,因为你没有它。