0

我目前正在研究 Jsoup。我已经得到一个元素content看起来像

<p>123</p>
<p>456</p>
<p>789</p>
<p>abc</p>
<p>efg</p>
....

efg 行之后有几行,但我希望删除 efg 行之后的所有行,我希望结果是一个元素(不是元素)

我尝试了几种方法,例如

content.children().removeAll(content.getElementsByIndexGreaterThan(content.children().indexOf(content.select("p:contains(efg)"))));

或者

content.getElementsByIndexGreaterThan(content.select("p:contains(efg)")).remove();

不幸的是,它们都不起作用。有没有人对此有更好的解决方案?感谢您阅读这篇文章。

4

1 回答 1

1
<div> 
 <p>123</p> 
 <p>456</p> 
 <p>789</p> 
 <p>abc</p> 
 <p>efg</p> 
 <p>111</p> 
 <p>222</p> 
 <p>333</p> 
 <p>444</p> 
</div>

public static void main(String[] args) throws Exception {
    String html = new String(Files.readAllBytes(Paths.get("input.html")));
    Document doc = Jsoup.parse(html);
    Element content = doc.select("div").first();

    Element lastValidElement = content.select("p:contains(efg)").first();
    int lastValidElementIndex = content.children().indexOf(lastValidElement);
    content.getElementsByIndexGreaterThan(lastValidElementIndex).remove();
    System.out.println(content);
}

<div> 
 <p>123</p> 
 <p>456</p> 
 <p>789</p> 
 <p>abc</p> 
 <p>efg</p>     
</div>
于 2016-01-17T14:46:11.630 回答