如何解析html与标签仍然完好无损

时间:2013-09-12 11:34:04

标签: java html dom html-parsing sax

我正在尝试解析一个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等等......他们都没有给我正确的结果。有谁知道如何以正确的方式做到这一点?真的很挣扎。提前谢谢......

2 个答案:

答案 0 :(得分: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是否格式正确。

答案 1 :(得分: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());