跳转到主内容
趣航编程网 - 趣学编程,启航技术之路!

怎么用XPath选取文本节点 text()的用法

text() 选取元素的直接文本子节点而非所有后代或元素本身;例如 //div/text() 匹配 "Hello" 和 "!",但不匹配嵌套在 中的 "World"。 XPath 中的 text() 是用来选取元素的直接文本子节点,不是所有后代文本,也不是元素本身,而是紧贴在该元素标签内的纯文字内容。 text() 只匹配直接子文本节点 比如 HTML 片段:
HelloWorld!
其中
//div/text()
会匹配到两个文本节点: "Hello" 和 "!" ,但不会匹配
里的 "World",因为它不是
的直接子文本节点,而是嵌套在
内的。 常见用法和注意事项 要获取某个元素的全部可见文本(含后代),用
string(//div)
或
//div//text()
(后者返回所有后代文本节点,需合并)
text()
返回的是节点集,不是字符串;在支持 XPath 1.0 的环境(如 浏览器 控制台、Selenium)中,不能直接用
text()
做等于判断,得用
normalize-space()
处理空白 匹配精确文本时建议写成:
//div[normalize-space(text()) = "Hello"]
,避免前后空格或换行干扰 如果一个元素内有多个 text() 节点(比如被注释或标签隔开),
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"]
基本上就这些。text() 看似简单,但容易忽略它只管“直接子”、不处理空白、不自动合并这些细节。 Comet AI 浏览器 下载 Comet AI 浏览器,体验由 Perplexity AI 驱动的革命性上网方式。内置 AI 助手可实时总结网页、跨标签页对比信息、自动执行任务。告别繁琐操作,让 AI 成为你的浏览副驾,大幅提升研究与工作效率。支持 Windows、macOS、Android 和 iOS。 下载

相关文章