如何在节点div之前选择所有节点p?
<div>
<div>blbaba</div>
<p>a</p>
<p>b</p>
<p>c</p>
<p>d</p>
<div>blbaba</div>
<p>e</p>
<p>f</p>
<p>g</p>
<p>h</p>
<div>blbaba</div>
</div>
我想要a,b,c,d或e,f,g,h 我尝试过类似:// div / following :: p [preceding-sibling :: div [1]]
答案 0 :(得分:5)
使用:
/div/div/following::p[count(preceding::div) = 1]
在1 st p
之后和2 nd 之前获得div
。将表达式中的1
替换为2
,以便在2 nd p
之后和3 rd 之前选择div
。
答案 1 :(得分:4)
//div/following-sibling::p[preceding::div]
应该可以获得所有p(a,b,c,d, e,f,g,h
)
如果div中包含不同的文本,则可以添加一些条件。例如,在下面的示例中仅获取a,b,c,d将是://div[text()='a']/following-sibling::p[preceding::div]
或者如果你有一些类,类别或任何其他可以区分div的东西(如示例中的类)://div[@class='peach']/following-sibling::p[preceding::div]
<div>
<div class='peach'>a</div>
<p>a</p>
<p>b</p>
<p>c</p>
<p>d</p>
<div id='abc_123132' >b</div>
<p>e</p>
<p>f</p>
<p>g</p>
<p>h</p>
<div>c</div>
</div>
最后一个例子是您的代码是自动生成的,而您只知道div的某些属性的一部分。在上面的示例中,您可以选择e,f,g,h,如下所示:
//div[contains(@id,'abc')]/following-sibling::p[preceding::div]
获取包含'abc'并且在另一个div之前的div之后的所有兄弟p