text() 选取元素的直接文本子节点而非所有后代或元素本身;例如 //div/text() 匹配 "Hello" 和 "!",但不匹配嵌套在 中的 "World"。

XPath 中的 text() 是用来选取元素的直接文本子节点,不是所有后代文本,也不是元素本身,而是紧贴在该元素标签内的纯文字内容。
text() 只匹配直接子文本节点
比如 HTML 片段: 假设有: 基本上就这些。text() 看似简单,但容易忽略它只管“直接子”、不处理空白、不自动合并这些细节。
其中 //div/text() 会匹配到两个文本节点:"Hello" 和 "!",但不会匹配 里的 "World",因为它不是 内的。
常见用法和注意事项
string(//div) 或 //div//text()(后者返回所有后代文本节点,需合并)text() 返回的是节点集,不是字符串;在支持 XPath 1.0 的环境(如浏览器控制台、Selenium)中,不能直接用 text() 做等于判断,得用 normalize-space() 处理空白//div[normalize-space(text()) = "Hello"],避免前后空格或换行干扰text()[1] 可取第一个,text()[last()] 取最后一个实际例子:抓取标题但避开图标文字
用户中心 v2.1
想只取“用户中心”这个文本,可以://h2/text()[normalize-space() != ""] → 得到中间那个非空文本节点
或者更稳一点://h2/text()[contains(., "用户中心")]不推荐的写法
//div/text() = "Hello" 在多数 XPath 引擎中会报错或行为异常,因为 = 左侧是节点集,右侧是字符串,类型不匹配。
应改用://div[text() = "Hello"](前提是整个元素只有这一个 text 子节点),或更稳妥的://div[normalize-space() = "Hello"]










