如何用XPath定位自身无文本但子节点含指定文本的元素
解决XPath定位自身无文本但子节点含特定文本的节点问题
我来帮你搞定这个XPath的定位难题!
你遇到的核心问题是:要选中自身没有直接文本内容,但子节点<span>包含文本the one的<strong>标签。之前的//strong/span[text()='the one']会选中两个<span>节点,而且没有区分<strong>自身是否有文本,所以不符合需求。
正确的XPath写法
直接从<strong>节点出发,同时满足两个条件:
- 它的子节点
<span>文本等于the one - 它自身的直接文本(去掉空白后)为空
对应的XPath是:
//strong[span/text()='the one' and not(normalize-space(text()))]
为什么这个写法有效?
span/text()='the one':确保<strong>下存在符合文本要求的<span>子节点normalize-space(text()):提取<strong>自身的直接文本,并用normalize-space去掉前后空白、换行和多余空格,避免空白字符干扰判断not(...):筛选出自身直接文本为空的<strong>,这样就排除了第一个带有"This is not "文本的<strong>
另一种可选写法
如果你的场景中,目标<strong>的**所有文本内容(包括子节点)**恰好就是the one,也可以用更简洁的写法:
//strong[normalize-space(.)='the one']
这个写法会检查<strong>节点的整体文本内容(合并所有子节点文本后)是否等于the one,同样能选中第二个<strong>。
内容的提问来源于stack exchange,提问作者Yoiku
相关产品推荐
相关产品推荐

