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

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

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

<div class="atag btag" />

这是我的XPath表达式:

//*[@class='atag']

该表达式适用于

<div class="atag" />

但之前的例子并非如此。如何选择<div>?


慕桂英546537
浏览 782回答 3
3回答

喵喵时光机

不管属性的位置如何,这都会选择它们。//div[contains(@class,&nbsp;'atag')&nbsp;and&nbsp;contains(@class&nbsp;,'btag')]

慕姐8265434

mjv的回答是一个好的开始,但如果ATAG不是列出的第一个类名,它将失败。通常的方法是相当笨重的://*[contains(concat('&nbsp;',&nbsp;@class,&nbsp;'&nbsp;'),&nbsp;'&nbsp;atag&nbsp;')]只要类仅由空格(而不是其他形式的空格)分隔,这就有效了。情况几乎总是如此。如果不是这样的话,你必须让它变得更加笨重://*[contains(concat('&nbsp;',&nbsp;normalize-space(@class),&nbsp;'&nbsp;'),&nbsp;'&nbsp;atag&nbsp;')](按类空格分隔字符串进行选择是非常常见的情况,令人惊讶的是它没有一个特定的XPath函数,比如CSS 3‘[class~=“ATAG”]’)。

慕婉清6462132

参见Bobince的解决方案,该解决方案使用含而不是一开始,以及确保比较在完整令牌级别进行的技巧(以免“ATAG”模式被发现为另一个“标记”的一部分)。“ATAGbtag”是类属性的一个奇数,但请尝试://*[starts-with(@class,"atag")]
打开App,查看更多内容
随时随地看视频慕课网APP