med*_*iev 430
此选择器应该可以工作,但如果用适当的标记替换它会更有效:
//*[contains(@class, 'Test')]
Run Code Online (Sandbox Code Playgroud)
或者,因为我们知道所寻找的元素是div
:
//div[contains(@class, 'Test')]
Run Code Online (Sandbox Code Playgroud)
但是,因为这也将匹配情况下,像class="Testvalue"
或class="newTest"
@中发表了托默勒格的版本是更好的:
//div[contains(concat(' ', @class, ' '), ' Test ')]
Run Code Online (Sandbox Code Playgroud)
如果您希望确定它将正确匹配,您还可以使用normalize-space函数清除类名周围的杂散空格字符(如@Terry所述):
//div[contains(concat(' ', normalize-space(@class), ' '), ' Test ')]
Run Code Online (Sandbox Code Playgroud)
请注意,在所有这些版本中,*最好应替换为您实际希望匹配的任何元素名称,除非您希望搜索文档中的每个元素以获取给定条件.
Oll*_*ula 142
最轻松的方式..
//div[@class="Test"]
Run Code Online (Sandbox Code Playgroud)
假设你想<div class="Test">
按照描述找到.
Ale*_*man 24
我只是提供这个作为答案,正如Tomalak在很久以前作为对meder的回答的评论
//div[contains(concat(' ', @class, ' '), ' Test ')]
Run Code Online (Sandbox Code Playgroud)
Joh*_*ers 21
使用XPath进行此操作的唯一正确方法:
//div[contains(concat(" ", normalize-space(@class), " "), " Test ")]
Run Code Online (Sandbox Code Playgroud)
该函数normalize-space
剥离前导和尾随空格,并且还用单个空格替换空白字符序列.
如果不需要许多这些Xpath查询,您可能希望使用将CSS选择器转换为XPath的库,因为CSS选择器通常比XPath查询更容易读取和写入.例如,在这种情况下,您可以使用两者div[class~="foo"]
并div.foo
获得相同的结果.
我能找到的一些图书馆:
Ben*_*wee 10
XPath 有一个contains-token函数,专门针对这种情况而设计:
//div[contains-token(@class, 'Test')]
Run Code Online (Sandbox Code Playgroud)
它仅在最新版本的 XPath (3.1) 中受支持,因此您需要最新的实现。
从 XPath 2.0 开始,您可以使用 tokenize 函数:
//div[tokenize(@class,'\s+')='Test']
Run Code Online (Sandbox Code Playgroud)
在这里,它将对空白进行标记,然后将结果字符串与“Test”进行比较。
它是 XPath 3.1 函数 contains-token() 的替代方案
但目前(2021-04-30)没有浏览器支持 XPath 2.0 或更高版本。
归档时间: |
|
查看次数: |
290935 次 |
最近记录: |