6

如何选择所有节点 p 直到节点 div ?

<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]]

4

2 回答 2

9

利用:

/div/div/following::p[count(preceding::div) = 1]

p在 1 st div之后和 2 nd之前得到。1在表达式中替换为在 2 nd之后和 3 rd2之前进行选择。p div

于 2012-06-12T09:46:32.737 回答
5

//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]获取在 id 包含 'abc' 的 div 之后并在另一个 div 之前的所有兄弟 p

于 2012-06-12T11:59:48.813 回答