请求正确XPATH:提取含student类型节点的<a>下id类型<cc>的value值
正确的XPath解决方案
首先咱们先拆解下你原来的XPath为啥没结果:
- 笔误问题:你写的是
type="bond",但实际要匹配的是student类型的<cc>节点; - 节点顺序逻辑错了:在目标
<a>里,type="id"的<cc>是在type="student"的<cc>前面的,而following-sibling是找当前节点之后的兄弟节点,自然搜不到对应内容。
推荐的健壮型XPath表达式
//a[cc/type="student"]/cc[type="id"]/value/text()
表达式逻辑说明
//a[cc/type="student"]:先筛选出所有包含type为student的<cc>子节点的<a>节点,直接锁定第一个<a>(第二个<a>里的<cc>是employee,会被排除);/cc[type="id"]:在锁定的<a>节点内部,找到type为id的<cc>子节点;/value/text():提取该<cc>节点下<value>的文本内容,也就是你要的345。
这种写法的好处是不依赖<cc>节点的顺序,不管id类型的<cc>在student类型的<cc>前还是后,都能准确匹配,比依赖兄弟节点位置的写法更可靠。
如果你非要用兄弟节点的方式(不推荐,节点顺序变动就会失效),修正后的表达式可以是:
//cc[type="student"]/preceding-sibling::cc[type="id"]/value/text()
它会先找到type="student"的<cc>节点,再取它前面的type="id"兄弟节点的value文本,也能得到345。
内容的提问来源于stack exchange,提问作者user2123852
相关产品推荐
相关产品推荐

