如何用XPath获取文本仅含数字的DOM节点?
用XPath直接筛选仅含数字的元素
问题背景
现有如下DOM结构:
<a>abc</a> <a>def</a> <a>13456</a> <a>gh564</a>
需要直接通过XPath获取仅包含数字的<a>元素,无需先遍历所有<a>再检查文本。
解决方案
完全可行,根据你使用的XPath版本,有两种实现方式:
XPath 1.0(多数旧版工具/框架默认支持)
由于XPath 1.0没有原生正则函数,可通过translate()函数实现://a[translate(text(), '0123456789', '') = '']原理:把文本中的所有数字字符替换为空字符串,如果替换后结果为空,说明原文本只包含数字。
如果要处理文本前后有空格的情况(比如
<a> 789 </a>),可以先用normalize-space()去除首尾空格://a[translate(normalize-space(text()), '0123456789', '') = '']XPath 2.0及以上(新版工具/语言如Python的lxml支持)
可以直接使用正则匹配函数matches(),写法更直观://a[matches(text(), '^\d+$')]正则
^\d+$表示:从文本开头到结尾,全部由一个或多个数字组成。同样处理空格的话:
//a[matches(normalize-space(text()), '^\d+$')]
内容的提问来源于stack exchange,提问作者Gauthier Buttez
相关产品推荐
相关产品推荐

