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);