Jsoup - 从元素中提取html

时间:2016-02-08 07:47:48

标签: android html-parsing jsoup

我想使用 jsoup HTML解析器库从div元素中提取HTML代码。

HTML code:

<div class="entry-content">
   <div class="entry-body">
      <p><strong>Text 1</strong></p>
      <p><strong> <a class="asset-img-link" href="http://example.com" style="display: inline;"><img alt="IMG_7519" class="asset  asset-image at-xid-6a00d8341c648253ef01b7c8114e72970b img-responsive" src="http://example.com" style="width: 500px;" title="IMG_7519" /></a><br /></strong></p>
      <p><em>Text 2</em> </p>
   </div>
</div>

提取部分:

String content = ... the content of the HTML from above
Document doc = Jsoup.parse(content);
Element el = doc.select("div.entry-body").first();

我希望结果el.html()成为div tab entry-body的整个HTML:

<p><strong>Text 1</strong></p>
  <p><strong> <a class="asset-img-link" href="http://example.com" style="display: inline;"><img alt="IMG_7519" class="asset  asset-image at-xid-6a00d8341c648253ef01b7c8114e72970b img-responsive" src="http://example.com" style="width: 500px;" title="IMG_7519" /></a><br /></strong></p>
  <p><em>Text 2</em> </p>

但我只获得了第一个<p>标记:

<p><strong>Text 1</strong></p>

3 个答案:

答案 0 :(得分:2)

试试这个:

Elements el = doc.select("div.entry-body");

而不是:

Element el = doc.select("div.entry-body").first();

然后:

for(Element e : el){
    e.html();
}

修改

如果你这样做,也许你会得到结果: 我试着这样做,它给出了正确的结果。     Elements el = doc.select("a.asset-img-link");

答案 1 :(得分:1)

在您的情况下,您使用

  doc.select("div[name=entry-body]") to select that specific <div>

根据此cookbook

答案 2 :(得分:1)

正如对OP的评论所述,我不明白。这是我对问题的再现,它完全符合你的要求:

String html = ""
    +"<div class=\"entry-content\">"
    +"   <div class=\"entry-body\">"
    +"      <p><strong>Text 1</strong></p>"
    +"      <p><strong> <a class=\"asset-img-link\" href=\"http://example.com\" style=\"display: inline;\"><img alt=\"IMG_7519\" class=\"asset  asset-image at-xid-6a00d8341c648253ef01b7c8114e72970b img-responsive\" src=\"http://example.com\" style=\"width: 500px;\" title=\"IMG_7519\" /></a><br /></strong></p>"
    +"      <p><em>Text 2</em> </p>"
    +"   </div>"
    +"</div>"
    ;
Document doc = Jsoup.parse(html);
Element el = doc.select("div.entry-body").first();
System.out.println(el.html());

这导致以下输出:

<p><strong>Text 1</strong></p> 
<p><strong> <a class="asset-img-link" href="http://example.com" style="display: inline;"><img alt="IMG_7519" class="asset  asset-image at-xid-6a00d8341c648253ef01b7c8114e72970b img-responsive" src="http://example.com" style="width: 500px;" title="IMG_7519"></a><br></strong></p> 
<p><em>Text 2</em> </p>