如何用XPath获取class动态的div标签下的全部文本?
动态class的div文本获取解决方案
目标HTML结构:
<div class="o-text99"> "No " "messages" " found" </div>需要定位class以
o-text开头(后缀数字动态变化)的div,并获取其下所有文本内容,原XPath无法得到预期结果。
原XPath的问题
你写的XPath //div[contains(@class,'o-text')]/self::div[contains(text(),'No')]/self::div[contains(text(),'messages')]/self::div[contains(text(),'found')] 逻辑错误:
text()返回的是当前节点的所有子文本节点集合,contains(text(), 'xxx')只会检查第一个文本节点是否匹配- 链式的
self::div相当于多次过滤同一个节点,无法匹配包含多个分散文本节点的div
正确的XPath方案
1. 基础定位(仅匹配class前缀)
如果只需要匹配class以o-text开头的div,直接用:
//div[starts-with(@class, 'o-text')]
2. 精准定位(确保包含目标文本片段)
如果要避免误匹配其他o-text开头的div,可通过检查节点的整体文本内容(.代表当前节点的所有拼接文本)来过滤:
//div[starts-with(@class, 'o-text') and contains(., 'No ') and contains(., 'messages') and contains(., ' found')]
3. 获取文本内容
获取所有子文本节点(返回列表):
//div[starts-with(@class, 'o-text')]/text()结果会是三个独立的文本片段:
"No "、"messages"、" found"获取拼接后的完整文本:
string(//div[starts-with(@class, 'o-text')])结果会是保留原格式的拼接文本:
"No ""messages"" found"
内容的提问来源于stack exchange,提问作者Tagore Ravindra
相关产品推荐
相关产品推荐

