starts-with()函数用于匹配字符串前缀,需结合name()、.或@attr使用:匹配元素名用starts-with(name(), 'div'),匹配文本用starts-with(., 'Error'),匹配属性用starts-with(@id, 'user');注意大小写敏感且参数须为字符串。

在XPath中,用 starts-with() 函数可以精准匹配节点名(或文本内容)以指定字符串开头的情况。它常用于元素名、属性值或文本节点的筛选。
选择元素名以特定字符开头的节点
注意:XPath本身不能直接判断“元素名是否以某字符开头”,因为 starts-with() 作用于字符串值(如 name() 或 local-name() 的返回结果),而非标签名本身。所以需结合 name() 函数使用:
-
//*[starts-with(name(), 'div')]—— 选所有标签名以 "div" 开头的元素(如<div>、<code><divcontainer></divcontainer>) -
//*[starts-with(local-name(), 'a')]—— 更推荐,避免命名空间干扰,选本地名以 "a" 开头的元素(如<a></a>、<article></article>) -
//p[starts-with(text(), 'Hello')]—— 选第一个文本子节点以 "Hello" 开头的<p></p><div class="aritcle_card flexRow"> <div class="artcardd flexRow"> <a class="aritcle_card_img" href="/xiazai/code/11413" title="AI舌诊面诊问诊医疗系统+诊疗商城系统源码"><img src="https://img.php.cn/upload/webcode/000/000/000/6a5591f290d1f849.png" alt="AI舌诊面诊问诊医疗系统+诊疗商城系统源码" ></a> <div class="aritcle_card_info flexColumn"> <a href="/xiazai/code/11413" title="AI舌诊面诊问诊医疗系统+诊疗商城系统源码">AI舌诊面诊问诊医疗系统+诊疗商城系统源码</a> <p>AI 舌诊面诊问诊医疗系统 + 诊疗商城系统源码是一套结合 AI 辅助诊断与商品转化的健康类程序,基于浩创云、ThinkPHP(PHP)开发,支持微信服务号与 H5 端,适合做中医舌诊面诊问答、健康建议推送以及配套诊疗商品的运营。</p> </div> <a href="/xiazai/code/11413" title="AI舌诊面诊问诊医疗系统+诊疗商城系统源码" class="aritcle_card_btn flexRow flexcenter"><b></b><span>下载</span> </a> </div> </div> -
//span[starts-with(., 'Error')]——.表示当前节点的合并文本(含所有子文本),更稳妥,适合有内联标签的场景 -
//input[starts-with(@id, 'user')]—— 选id属性以 "user" 开头的<input>元素(如id="username"、id="userEmail") -
//*[@class and starts-with(@class, 'btn-')]—— 先确保@class存在,再判断是否以 "btn-" 开头(避免空值报错) - 想忽略大小写?XPath 1.0 无内置函数,需靠外部处理;XPath 2.0+ 可用
lower-case()包裹,如starts-with(lower-case(@id), 'user') -
text()只取第一个文本子节点,若元素含多个文本或嵌套标签,建议用.替代 - 函数参数必须是字符串,
starts-with(@data-id, 123)会报错,应写成starts-with(@data-id, '123')
选择文本内容以特定字符开头的节点
这是最常见用法,直接对节点的字符串值做判断:
选择属性值以特定字符开头的节点
配合 @属性名 使用即可:
注意事项和常见坑
starts-with() 区分大小写,且只支持字符串前缀匹配,不支持通配符或正则:
基本上就这些。掌握 starts-with() 配合 name()、. 和 @attr,就能覆盖大多数“开头匹配”需求。

















