如何使用XPath查找嵌套div中任意位置元素?附排除元素示例
如何用XPath在嵌套div集合中定位元素(附示例)
嘿,我来帮你搞定这个XPath的问题!针对你提到的嵌套div里找元素、以及排除特定元素的需求,我分两部分来解释:
一、匹配嵌套div中任意位置的指定元素
如果要找所有嵌套在div里的某个元素(比如<a>),不管div嵌套多少层,最常用的是后代选择器的简写//,它能选中目标节点的所有后代元素(不管层级深度)。
举个基础例子:
- 要选中文档中所有div内部任意位置的a元素,用这个表达式:
拆解一下://div//a//div:选中页面中所有div元素(不管它们在DOM的哪个层级)//a:选中每个div下的所有后代a元素(直接子元素、孙元素甚至更深的都包含)
如果要限定某个特定的父div(比如id为0的div),可以更精准:
//div[@id="0"]//a
这个表达式只会选中id="0"的div内部所有嵌套的a元素,完全不会碰外面的元素。
二、排除特定元素的场景(你的示例需求)
先把你的HTML片段再明确一下:
<div id="0"> <a href="first.com"/> <div id="1"></div> <div id="2"> <div id="2.1"> <div id="2.11"> <a href="second.com" /> </div> </div> </div> <div id="3"><a href="third.com" /></div> </div> <a href="dont_find_this_one.com" />
你需要的是排除最后那个不在div里的a元素,只选div内部的所有a,用上面提到的精准表达式就可以:
//div[@id="0"]//a
这个会精准选中first.com、second.com、third.com这三个a,自动过滤掉外面的dont_find_this_one.com。
如果你的需求是选中所有a元素,但排除最后一个(不管它在不在div里),可以用位置过滤:
//a[not(position()=last())]
解释:
//a:选中页面中所有a元素[not(position()=last())]:过滤掉处于最后位置的那个a元素
另外,如果是要在div#0内部的a元素里排除最后一个(也就是third.com),可以用:
//div[@id="0"]//a[not(position()=last())]
这个会只留下first.com和second.com两个a元素。
内容的提问来源于stack exchange,提问作者anon
相关产品推荐
相关产品推荐

