<div>
<div class="header">
<p>name 1</p>
</div>
<div class="content">czx</div>
<div class="content">dsczx</div>
<div class="content">czsadx</div>
<div class="content">cz34x</div>
<div class="content">4czewtwex</div>
<div class="header">
<p>name 2</p>
</div>
<div class="content">czx</div>
<div class="content">czsadx</div>
<div class="content">cz34x</div>
<div class="content">4czewtwex</div>
<div class="header">
<p>name 3</p>
</div>
<div class="content">czx</div>
<div class="content">czsadx</div>
<div class="content">cz34x</div>
<div class="content">4czewtwex</div>
</div>
嗨,伙计们!我有一个这样的有问题的结构。我想创建一个 xpath,它将<div>
获取给定<p>
具有类"内容"下面的所有元素,但如果有任何其他元素带有类"header",则"header"下面的元素将被省略。
//div/p[text() = 'name 1']/../following-sibling::div[@class = 'content']
对于//div/p[text() = 'name 1']/../following-sibling::div[@class = 'content']
输出应为:
<div class="content">czx</div>
<div class="content">dsczx</div>
<div class="content">czsadx</div>
<div class="content">cz34x</div>
<div class="content">4czewtwex</div>
对于//div/p[text() = 'name 2']/../following-sibling::div[@class = 'content']
输出应为:
<div class="content">czx</div>
<div class="content">czsadx</div>
<div class="content">cz34x</div>
<div class="content">4czewtwex</div>
对于//div/p[text() = 'name 3']/../following-sibling::div[@class = 'content']
输出应为:
<div class="content">czx</div>
<div class="content">czsadx</div>
<div class="content">cz34x</div>
<div class="content">4czewtwex</div>
它有点复杂(我相信可以做得更好(。请注意,"名称 X"在 3 处使用(您还需要替换它 3 次(。
- 将所有元素从底部到"名称 3">
/div/div[preceding-sibling::d iv/p='name 3']
- 给出子列表中的元素总数
count(/div/div[preceding-sibling::d iv/p='name 3'](
- 返回带有类标头的 DIV 的第一个位置,如果未找到,则返回 0。
count(/div/div[preceding-sibling::d iv/p='name 3'][@class='header']/follow::d iv(
- 现在我们有一个列表,其中的元素总数,以及第一个带有类 Header 的 DIV 的位置(否则为 0(。现在我们可以计算我们真正需要多少职位
子列表的总数减去要删除的元素数 从列表中。
xPath (wokring solution(:
/div/div[preceding-sibling::div/p='name 3'][position()<count(/div/div[preceding-sibling::div/p='name 3'])+1-count(/div/div[preceding-sibling::div/p='name 3'][@class='header']/following::div)][@class='content']