为何XPath表达式//a/@href[contains(text(),"stack")]无法生效?
为什么你的第二个XPath表达式无法生效?
问题出在对XPath中属性节点和text()的理解上:
@href是属性节点,它本身没有子文本节点——text()这个轴是用来选取元素节点的直接子文本节点的,属性节点不存在这类子节点。所以contains(text(),"stack")相当于在找一个不存在的节点内容,自然匹配不到结果。要判断属性节点的字符串值,直接用
.指代属性节点自身即可。把表达式改成//a/@href[contains(.,"stack")]就能正常匹配包含"stack"的href属性了。
对比两个有效表达式:
//a[contains(@href, "stack")]/@href:先筛选出href属性包含"stack"的<a>元素,再提取它的href属性//a/@href[contains(.,"stack")]:先提取所有<a>的href属性,再筛选其中字符串值包含"stack"的属性节点
这两种写法都能得到你想要的结果,后者是你想要的写法的正确修正版。
内容的提问来源于stack exchange,提问作者Bastian Ebeling
相关产品推荐
相关产品推荐

