基于XPath 1.0匹配含指定文本与数字的元素(Octoparse适用)
解决Octoparse中XPath 1.0匹配含特定文本和数字的元素问题
正确的XPath查询语句
//*[contains(string(.), 'EXAMPLE') and translate(string(.), '0123456789', '') != string(.)]
原语句的问题分析
你之前的查询使用text()节点集而非元素的完整文本内容,导致逻辑不一致:
contains(text(), 'EXAMPLE')会检查元素的任意子文本节点是否包含目标文本,但translate(text(), ...)仅会处理元素的第一个子文本节点。如果数字存在于其他子文本节点中,第二个条件会误判为不满足,最终导致查询失败。
新语句的逻辑说明
string(.):获取当前元素的完整拼接文本(所有子文本节点内容合并后的结果),确保前后判断的是同一文本内容。contains(string(.), 'EXAMPLE'):确认元素完整文本包含“EXAMPLE”。translate(string(.), '0123456789', '') != string(.):将文本中的所有数字移除后,若结果与原文本不同,说明原文本中存在至少一个数字。
内容的提问来源于stack exchange,提问作者Price Mitchell
相关产品推荐
相关产品推荐

