Xpath选择节点直到标记

时间:2012-06-12 08:59:17

标签: xml xpath

如何在节点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]]

2 个答案:

答案 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