XPath如何获取节点的字符串值 string()函数

发布时间 - 2025-12-27 00:00:00    点击率:
string()函数返回节点及其后代文本节点的合并字符串值,自动归并空白符为单个空格;对节点集仅取首个节点,空节点返回空字符串,元素节点递归提取并拼接所有后代文本。

XPath 中的 string() 函数用于获取节点的**合并文本内容(即字符串值)**,它会把目标节点及其所有后代文本节点的内容拼接成一个单一字符串,忽略元素标签、注释、处理指令等非文本节点,并自动将空白符(如换行、缩进)归并为普通空格。

string() 的基本用法

语法:string(node-set)string()(无参数时作用于当前上下文节点)。

  • 如果传入节点集,只取第一个节点的字符串值;
  • 如果节点为空(不存在),返回空字符串;
  • 对文本节点、属性节点、注释节点等,直接返回其内容;
  • 对元素节点,则递归提取其所有后代文本节点,按文档顺序拼接,中间空白被规范化为单个空格。

常见使用场景与示例

假设有如下 HTML 片段:


  

产品


  

型号:A100


  

价格:¥299


  • string(//div[@id='info']) → 返回 "产品 型号:A100 价格: ¥299"(注意空格和换行被压缩);
  • string(//p[2]/span) → 返回 "¥299"
  • string(@class)(在有 class 属性的元素上)→ 返回该属性值;
  • //div[string() = '产品 型号:A100 价格: ¥299'] 可用于匹配整个 div 的归一化文本内容(但需注意空格敏感性)。

注意事项与陷阱

string() 不等于 text() 的简单拼接:text() 只选直接子文本节点,而 string() 会递归合并全部后代文本,并做空白规范化。

  • 若需精确控制文本提取(如排除某些子元素内容),应先用路径定位到具体文本节点,再用 string() 或直接取值;
  • 在比较操作中慎用 string(),因空格压缩可能导致意外匹配或不匹配;
  • 在 XPath 1.0 中,string() 无法作用于节点集以外的类型(如布尔值、数字),否则报错;
  • XPath 2.0+ 支持更灵活的字符串函数(如 string-join()),但 string() 行为保持一致。

替代方案与补充技巧

当 string() 不够精准时,可考虑:

  • normalize-space(string(...)) 进一步去除首尾空格、合并内部多余空白;
  • concat() 拼接多个明确路径的字符串(如 concat(//h2, ' - ', //p[1]));
  • //div[@id='info']//text()[normalize-space()] 提取所有非空文本节点,再在程序层处理。


# html  # node  # String  # 字符串  # 递归  # class  # 字符串值  # 作用于  # 换行  # 第一个  # 多个  # 空字符串  # 不存在  # 会把  # 再用 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 电商网站制作价格怎么算,网上拍卖流程以及规则?  使用C语言编写圣诞表白程序  微信小程序 五星评分(包括半颗星评分)实例代码  简单实现Android验证码  如何快速查询网站的真实建站时间?  5种Android数据存储方式汇总  历史网站制作软件,华为如何找回被删除的网站?  Win11搜索不到蓝牙耳机怎么办 Win11蓝牙驱动更新修复【详解】  Windows10如何删除恢复分区_Win10 Diskpart命令强制删除分区  如何在万网自助建站中设置域名及备案?  Laravel如何实现图片防盗链功能_Laravel中间件验证Referer来源请求【方案】  如何用y主机助手快速搭建网站?  Laravel事件监听器怎么写_Laravel Event和Listener使用教程  如何用搬瓦工VPS快速搭建个人网站?  手机软键盘弹出时影响布局的解决方法  Laravel怎么返回JSON格式数据_Laravel API资源Response响应格式化【技巧】  Linux虚拟化技术教程_KVMQEMU虚拟机安装与调优  JS去除重复并统计数量的实现方法  如何使用 Go 正则表达式精准提取括号内首个纯字母标识符(忽略数字与嵌套)  中山网站制作网页,中山新生登记系统登记流程?  ,南京靠谱的征婚网站?  Laravel如何实现全文搜索_Laravel Scout集成Algolia或Meilisearch教程  制作网站软件推荐手机版,如何制作属于自己的手机网站app应用?  Laravel Vite是做什么的_Laravel前端资源打包工具Vite配置与使用  中山网站推广排名,中山信息港登录入口?  javascript中闭包概念与用法深入理解  详解Android图表 MPAndroidChart折线图  Laravel如何编写单元测试和功能测试?(PHPUnit示例)  JavaScript数据类型有哪些_如何准确判断一个变量的类型  laravel怎么用DB facade执行原生SQL查询_laravel DB facade原生SQL执行方法  Laravel怎么实现搜索功能_Laravel使用Eloquent实现模糊查询与多条件搜索【实例】  微信推文制作网站有哪些,怎么做微信推文,急?  linux top下的 minerd 木马清除方法  Python面向对象测试方法_mock解析【教程】  Win11任务栏卡死怎么办 Windows11任务栏无反应解决方法【教程】  Laravel请求验证怎么写_Laravel Validator自定义表单验证规则教程  打造顶配客厅影院,这份100寸电视推荐名单请查收  为什么要用作用域操作符_php中访问类常量与静态属性的优势【解答】  Laravel 419 page expired怎么解决_Laravel CSRF令牌过期处理  浏览器如何快速切换搜索引擎_在地址栏使用不同搜索引擎【搜索】  如何快速搭建高效WAP手机网站?  网站制作软件有哪些,制图软件有哪些?  如何在宝塔面板中创建新站点?  Google浏览器为什么这么卡 Google浏览器提速优化设置步骤【方法】  浅谈Javascript中的Label语句  Laravel Octane如何提升性能_使用Laravel Octane加速你的应用  Laravel如何使用Service Container和依赖注入?(代码示例)  如何登录建站主机?访问步骤全解析  软银砸40亿美元收购DigitalBridge 强化AI资料中心布局  网站页面设计需要考虑到这些问题