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