使用Jsoup解析div中的元素

时间:2014-05-06 07:24:13

标签: java jsoup

这是我要解析的HTML:

<div class="entry">
    <img src="http://www.example.com/image.jpg" alt="Image Title">
    <p>Here is some text</p>
    <p>Here is some more text</p>
</div>

我想将<p>中的文本放到一个ArrayList中。我已经尝试过使用Jsoup了。

Document doc = Jsoup.parse(line);
Elements descs = doc.getElementsByClass("entry");

for (Element desc : descs) {
    String text = desc.getElementsByTag("p").first().text();
    myArrayList.add(text);
}

但这根本不起作用。我对Jsoup很新,但它似乎有其局限性。如果我可以使用Jsoup将<p>中的文本放到一个ArrayList中,我该如何实现呢?如果我必须使用其他方法来解析HTML,请告诉我。

我正在使用BufferedReader一次读取一行html文件。

4 个答案:

答案 0 :(得分:1)

您可以将方法更改为以下内容:

Document doc = Jsoup.parse(line);
Elements pElems = doc.select("div.entry > p");

for (Element pElem : pElems) {
   myArrayList.add(pElem.data());
}

答案 1 :(得分:1)

不确定为什么要逐行阅读html。但是,如果您想阅读整个HTML,请使用以下代码:

String line = "<div class=\"entry\">" + 
                "<img src=\"http://www.example.com/image.jpg\" alt=\"Image Title\">" + 
                "<p>Here is some text</p>" + 
                "<p>Here is some more text</p>" + 
              "</div>";

Document doc = Jsoup.parse(line);
Elements descs = doc.getElementsByClass("entry");

List<String> myArrayList = new ArrayList<String>();

for (Element desc : descs) {
    Elements paragraphs = desc.getElementsByTag("p");
    for (Element paragraph : paragraphs) {
        myArrayList.add(paragraph.text());
    }
}

答案 2 :(得分:0)

for - 循环中:

Elements ps = desc.select("p");

http://jsoup.org/apidocs/org/jsoup/nodes/Element.html#select(java.lang.String)

答案 3 :(得分:0)

试试这个:

Document doc = Jsoup.parse(line);
String text = doc.select("p").first().text();