我如何匹配包含特定字符串的属性?
当属性包含多个单词时,我遇到了按属性选择节点的问题。 例如:
<div class="atag btag" />
这是我的xpath表达式:
//*[@class='atag']
表达式适用于
<div class="atag" />
但不适用于前面的示例。 我如何选择<div>
?
无论属性的位置如何,这将全部选中它们
//div[contains(@class, 'atag') and contains(@class ,'btag')]
mjv的答案是一个好的开始,但如果atag不是列出的第一个类名,则会失败。
通常的做法是相当笨拙的:
//*[contains(concat(' ', @class, ' '), ' atag ')]
只要类仅由空格分隔,而不是其他形式的空格,就可以工作。 这几乎总是如此。 如果不可能,你必须使它更加笨拙:
//*[contains(concat(' ', normalize-space(@class), ' '), ' atag ')]
(通过类名称空间分隔的字符串进行选择是一种常见的情况,令人惊讶的是没有特定的XPath函数,比如CSS3的'[class_ =“atag”]')。
编辑 :看看bobince的解决方案,它使用包含而不是开始 - 与一个窍门,以确保比较完成在一个完整的标记级别(以避免'atag'模式被发现作为另一个'标记'的一部分)。
“atag btag”对于class属性来说是一个奇数值,但从来就不是那么少,试试:
//*[starts-with(@class,"atag")]
链接地址: http://www.djcxy.com/p/56995.html
上一篇: How can I match on an attribute that contains a certain string?