XPath函数库提供了多种用于处理节点和数据的工具,其中string()、number()、count()是开发中最常使用的三个函数,分别用于数据类型转换和节点统计,能大幅提升文档解析的效率。

string()函数
string()函数的作用是将输入的对象转换为字符串类型,输入对象可以是节点、数字、布尔值等,转换规则根据输入类型有所不同。
语法规则
基本语法为string(object?),参数object为可选,若不传入参数则默认返回当前上下文节点的字符串值。
转换规则
- 节点:返回该节点的文本内容,会拼接所有子节点的文本
- 数字:转换为对应的数字字符串,比如123转换为"123"
- 布尔值:true转换为"true",false转换为"false"
示例代码
假设我们有如下XML文档:
<book> <title>XPath教程</title> <price>49.9</price> <in_stock>true</in_stock> </book>
对应的XPath表达式和结果如下:
// 获取title节点的字符串值 string(//title) // 结果:"XPath教程" // 转换数字为字符串 string(49.9) // 结果:"49.9" // 转换布尔值为字符串 string(true()) // 结果:"true"
number()函数
number()函数用于将输入对象转换为数字类型,若转换失败则返回NaN(非数字)。
语法规则
基本语法为number(object?),参数object为可选,不传入时默认转换当前上下文节点。
转换规则
- 字符串:若字符串是合法数字格式则转换为对应数字,否则返回NaN
- 布尔值:true转换为1,false转换为0
- 节点:先获取节点的字符串值,再按照字符串规则转换
示例代码
基于上面的XML文档,XPath表达式和结果如下:
// 转换price节点的内容为数字
number(//price) // 结果:49.9
// 转换布尔值为数字
number(true()) // 结果:1
number(false()) // 结果:0
// 非法字符串转换
number("abc") // 结果:NaN
count()函数
count()函数用于统计输入的节点集合中节点的数量,返回值为数字类型。
语法规则
基本语法为count(node-set),参数node-set为必填,是需要统计的节点集合。
应用场景
常用于统计符合条件的节点数量,比如统计文档中某个标签的出现次数,或者统计满足特定条件的节点个数。
示例代码
假设我们有如下XML文档:
<library>
<book category="tech">
<title>XPath教程</title>
</book>
<book category="tech">
<title>XML基础</title>
</book>
<book category="literature">
<title>散文精选</title>
</book>
</library>
对应的XPath表达式和结果如下:
// 统计所有book节点的数量 count(//book) // 结果:3 // 统计category为tech的book节点数量 count(//book[@category="tech"]) // 结果:2
三个函数的组合使用
这三个函数可以组合使用,实现更复杂的数据处理需求,比如先统计节点数量再转换为字符串展示:
// 统计tech类书籍数量并转换为字符串 string(count(//book[@category="tech"])) // 结果:"2"
在实际的XML或HTML解析场景中,合理搭配使用这三个函数可以快速完成数据提取和处理的任务,减少额外的代码逻辑。