string-length()返回字符串中Unicode字符个数;参数为空或未提供时返回0,节点集取第一个节点的字符串值;空格和换行符计入长度,需精确判断时应先用normalize-space()清理。
XPath 中用 string-length() 函数获取字符串长度,它返回字符串中 Unicode 字符的个数(不是字节数)。
函数接受一个字符串参数,返回整数。如果参数为空或未提供,返回 0;如果参数是节点集,只取第一个节点的字符串值(即 string(node-set) 的结果)。
string-length('hello') → 返回 5
string-length('你好') → 返回 2(每个汉字算 1 个字符)string-length('') → 返回 0
string-length()(无参数)→ 返回 0
常用于判断某个元素是否为空、或筛选文本较长/较短的节点。
string-length(//title) → 返回第一个 元素文本内容的字符数//div[string-length(text()) > 10] → 选中文本子节点长度超过 10 的
-
//input[string-length(@placeholder) > 0] → 找出设置了非空 placeholder 的 input
注意空格和换行符也算字符
text() 可能包含空白(如缩进、换行),string-length() 会把它们计入长度。需要精确判断“有效内容”时,建议先用 normalize-space() 清理:
-
string-length(normalize-space(//p)) → 去掉首尾空格、合并中间多个空格为一个后计算长度
-
//p[string-length(normalize-space()) = 0] → 找真正“空内容”的段落(忽略纯空白)
在不同 XPath 版本中的兼容性
string
-length() 是 XPath 1.0 就支持的核心函数,所有主流解析器(如 lxml、Saxon、浏览器内置 XPath)都支持。XPath 2.0/3.0 中行为一致,但新增了更灵活的字符串函数(如 string-length((), 'UTF-8') 这类字节长度计算需用其他方式,XPath 本身不直接支持)。
基本上就这些 —— 简单但容易忽略空白影响,用前记得看清楚目标文本的实际构成。