Java Jsoup:获取某个元素之前的所有元素/移除某个元素之后的所有堆叠元素

Java Jsoup:获取某个元素之前的所有元素/移除某个元素之后的所有堆叠元素,java,html,jsoup,html-parsing,Java,Html,Jsoup,Html Parsing,这个问题有另一个版本,我将用它来作为我的基础 我想得到所有在朋友宠物之前的宠物。我尝试使用原始问题中提出的解决方案,但在这个用例中遇到了这个结果 输入: <div class="pets"> <div> <div class="pet">1</div> <div class="pet">2</div> </div> <

这个问题有另一个版本,我将用它来作为我的基础

我想得到所有在朋友宠物之前的宠物。我尝试使用原始问题中提出的解决方案,但在这个用例中遇到了这个结果

输入:

<div class="pets">
  <div>
    <div class="pet">1</div>
    <div class="pet">2</div>
  </div>
    <div class="pet">3</div>
    <div class="friends-pets">Your friends have these pets:</div>
    <div class="pet">4</div>
  <div>
     <div class="pet">5</div>
     <div class="pet">6</div>
  </div>
<div>
<div class="pet">1</div>
 <div class="pet">2</div>
 <div class="pet">3</div>
<div class="pet">1</div>
<div class="pet">2</div>
<div class="pet">3</div>
<div class="pet">5</div>
<div class="pet">6</div>
因为nextSiblings()方法只获取属于同一父级的元素。 当我使用第二个答案中建议的css选择器时,如下所示:

.pet:not(.friends-pets ~ .pet)
我得到这个错误:

Did not find balanced marker at '.friends-pets ~ .pet'
所以我不能真正测试它是否真的有效


谢谢。

我的方法是用一个选择器选择你想要的和不想要的。您可以使用逗号
连接选择器,因此它将充当
运算符。元素的顺序将保持不变,并且您将有一个“同一级别”的所有元素的列表,其中没有父元素。那么你只能得到列表的前半部分

Elements goodElementsWithBadElement = document.select(".pet,.friends-pets");
Element badElement = goodElementsWithBadElement.select(".friends-pets").first();
int positionOfBadElement = goodElementsWithBadElement.indexOf(badElement);
List<Element> onlyWhatYouWant = goodElementsWithBadElement.subList(0, positionOfBadElement);
System.out.println(onlyWhatYouWant);
Elements goodelementswithbadeelement=document。选择(“.pet、.friends pets”);
Element badElement=GoodElement SwithBadElement。选择(“.friends pets”).first();
BadeElement的内部位置=GoodElement swithBadElement.indexOf(badElement);
仅列出您想要的内容=GoodElement swithBadElement.subList(0,BadeElement的位置);
System.out.println(仅限您想要的内容);

顺便说一句,我是先前答案的作者;)

它工作得很好。我的问题是,我认为jsoup中已经实现了一些东西,但我没有考虑使用列表。非常感谢你的帮助。
Elements goodElementsWithBadElement = document.select(".pet,.friends-pets");
Element badElement = goodElementsWithBadElement.select(".friends-pets").first();
int positionOfBadElement = goodElementsWithBadElement.indexOf(badElement);
List<Element> onlyWhatYouWant = goodElementsWithBadElement.subList(0, positionOfBadElement);
System.out.println(onlyWhatYouWant);