使用Jsoup按顺序解析HTML元素

时间:2017-09-01 14:25:49

标签: java android jsoup html-parser

使用Jsoup,我一直在尝试通过编程方式创建TextView和ImageView来解析文章并在Android应用程序中显示它。我试图避免在Android Studio中使用WebView布局,因为它不提供太多自定义。使用TextView,我可以将应用程序设置为我想要的行为。

问题在于我应该按顺序获取文章元素并按顺序显示。

文章可能看起来像这样(为了询问而简化)

<h2>Lorem ipsum</h2>
<p>Lorem ipsum 2</p>
<p>Lorem ipsum 3</p>
<p><img src="blabla.jpg"/></p>
<p>Lorem ipsum Lorem ipsum Lorem ipsum</p>
<strong>Dolor si amette</strong>
<p><img src="abc.png"/><br/>Source : ABC Pte. Ltd.</p>

每篇文章的结构都不一样。也许在其他一些文章中,它就像这样

<p><img src="blabla.jpg"/></p>
<p>Lorem ipsum 2</p>
<p>Lorem ipsum 3</p>
<h2>Lorem ipsum</h2>
<p><img src="abc.png"/><br/>Source : ABC Pte. Ltd.</p>
<strong>Dolor si amette</strong>

重要的是,每当theres图像,我应该得到图像的URL,当有文本时,我应该得到文本。

我尝试迭代每个 p标记并查找图片或文字。

    Document jsoupParse = Jsoup.parse(html);

    Elements paragraph = jsoupParse.getElementsByTag("p");
    int sizeJsoup = jsoupParse.getElementsByTag("p").size();
    System.out.println("Size of P tag = "+sizeJsoup);

    for(Element element:paragraph){
        if(element.hasText()){
            System.out.println("Text:"+element.text());
        }else{
            Elements image = element.getElementsByTag("img");
            for(Element imageElement:image){
                System.out.println("Image URL : "+imageElement.absUrl("src"));
            }
        }
    }

不幸的是,它不考虑标题标记,它只会抓取文本,例如

    <p><img src="abc.png"/><br/>Source : ABC Pte. Ltd.</p>

它只会低于文字而不是图片网址。

    Source : ABC Pte. Ltd.

1 个答案:

答案 0 :(得分:0)

而不是imageElement.absUrl("src");你可以尝试使用imageElement.attr("src");