使用jsoup选择我已设法提取以下html。我正在尝试获取<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>
答案 0 :(得分:2)
这适用于您发布的代码段。您可能希望进行一些更改以处理边缘情况,错误等。
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
对象中删除该部分。注意在first()
之前调用的remove()
。这个很重要。您想要调用remove()
的{{1}} Element
。first()
返回parentNode
。这将从Document
中删除元素,从而影响first()
对象。如果您不致电doc.select("div.dd_outer").remove();
并将其更改为此
remove()
您将调用Elements
select()
,remove()
返回select()
。这只是一个集合(各种列表包装)。因此,如果您致电Document
,则会影响doc
而非Vehicle* v = new Vehicle;
的结果。因此,如果您尝试打印{{1}}变量,您会看到删除的内容仍然存在。