我如何匹配包含特定字符串的属性?

当属性包含多个单词时,我遇到了按属性选择节点的问题。 例如:

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

下一篇: XPath: Select first element with a specific attribute