0

我正在尝试解析一个 html,例如:

<html>
  <body>
     <header>hello</header>
     <p>
       this is a text<br/>
     </p>
  </body>
</html>

我想提取

<p>
  this is a text<br/>
</p>

我试过 Jsoup:

private String parseTicketReply(String content) {
    Document doc = Jsoup.parse(content);
    String replybody = "";

    // zimbra 
    if (doc.select("body").size() > 0) {
        replybody = doc.select("body").get(0).text();
    }

    return replybody;            
}

我没有得到我想要的。我得到“这是一个文本”。

我尝试了 SAX perser、neko 等……它们都没有给我正确的结果。任何人都知道如何以正确的方式做到这一点?真的很挣扎。提前致谢...

4

2 回答 2

1

改变

replybody = doc.select("body").get(0).text();

replybody = doc.select("body").get(0).html();

你可以使用doc.body()而不是doc.select("body")

http://jsoup.org/cookbook/introduction/parsing-a-document

解析器将尽一切努力从您提供的 HTML 中创建干净的解析,无论 HTML 是否格式正确。

于 2013-09-12T11:51:18.990 回答
0

否则,您可以使用正则表达式解析您的 html。

例如,这个将为您提供带有标签的每个段落:

<p>[\w\W]*</p>

你可以试试这个:

String html = "<html>\n<header>hello</header>\n<body>\n<p>\n<br/>this is a text<br/>\n</p>\n</body>\n</html>";

System.out.println(html);

Pattern p = Pattern.compile("(<p>[\\w\\W]*</p>)");
Matcher matcher = p.matcher(html);
matcher.find();

System.out.println("\nResult below :");
System.out.println(matcher.group());
于 2013-09-12T11:55:54.997 回答