jsoup 删除 class

jsoup remove a class

使用 jsoup select 我已经设法提取了以下 html.I 我正在尝试获取 <a id="dd_start"></a><a id="dd_end"></a> 之间的所有 html 代码.

我用过 obj.first().getElementsByClass("div.dd_outer").remove() 但运气不好。 有什么建议么?

<div class="entry-content" itemprop="text"> 
<a id="dd_start"></a>
<p><a href="http://blablabla.com/2016/01/16/blablabla/icon-2/#main" rel="attachment wp-att-21"><img class="size-full wp-image-21501 aligncenter" src="http://blablabla.com/wp-content/uploads/16/01/google1.jpg" alt="google-icon" width="100%"></a></p> 
<p>blablabla.<br> <span id="more-21499"></span><br> blablabla.</p> 
<p>blablabla <a href="https://blablabla.com/blablabla" target="_blank">blablabla</a>. </p> 
<a id="dd_end"></a>
<div class="dd_outer">
 <div class="dd_inner">
   <div id="dd_ajax_float">
     <div class="dd_button_v">
     </div>
   </div> 
 </div>
</div>

这适用于您发布的代码段。您可能想要进行一些更改以处理边缘情况、错误等。

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

    Elements section = new Elements();
    Element sibling = doc.getElementById("dd_start").nextElementSibling();
    do {
        section.add(sibling);
        sibling = sibling.nextElementSibling();
    } while(!sibling.id().equals("dd_end"));

    System.out.println(section);
}

关于删除某个部分的问题,你可以这样做:

Document doc = Jsoup.parse(html);
doc.select("div.dd_outer").first().remove();
System.out.println(doc);

这将从您的 Document 对象中删除该部分。注意 remove() 之前调用的 first()。这个很重要。您想要调用 Elementremove(),这就是 first() returns。这将从 parentNode 中删除元素,从而影响 Document 对象。如果不调用first()改成这个

doc.select("div.dd_outer").remove();

您将调用 Elementsremove(),这就是 select() returns。这只是一个集合(各种列表包装器)。因此,如果您调用 remove(),您将影响 select() 而不是 Document 的结果。因此,如果您尝试打印 doc 变量,您将看到您删除的内容仍然存在。