jsoup只剥离html标签而不是新行字符?

时间:2013-01-22 06:48:22

标签: java html jsoup end-of-line

我在Java中有以下内容,我只想删除html标签而不是新行字符

<p>test1 <b>test2</b> test 3 </p> //line 1
<p>test4 </p> //line 2

如果我在文本丰富的编辑器中打开上面的内容,则第1行和第2行显示在不同的行中(不显示</p>标记)。但是记事本内容与</p>标记一起显示。删除我使用的所有html标签

Jsoup.parse(aboveContent).text()

删除所有html字符。但它在记事本中显示了同一行中的所有第1行和第2行。不知怎的,Jsoup还删除了换行符。

我尝试了什么: -

我还尝试用</p>替换\r\n,然后删除html标记

 Jsoup.parse(contentWith\r\n-Insteadof-</p>Tag ).text()

但是Jsoup仍然在同一行中删除行尾字符(如在调试器中我可以看到line1和line2)。

如何让Jsoup只删除html字符而不是新行字符?

2 个答案:

答案 0 :(得分:13)

你也可以这样做:

public static String cleanNoMarkup(String input) {
    final Document.OutputSettings outputSettings = new Document.OutputSettings().prettyPrint(false);
    String output = Jsoup.clean(input, "", Whitelist.none(), outputSettings);
    return output;

}

这里重要的事情是: 1. Whitelist.none() - 所以不允许加标 2..prettyPrint(false) - 因此不会删除换行符

答案 1 :(得分:4)

您获得一行,因为text()删除了所有空格字符。 但您可以使用StringBuilder并在那里插入每一行:

final String html = "<p>test1 <b>test2</b> test 3 </p>"
                    + "<p>test4 </p>";

Document doc = Jsoup.parse(html);        
StringBuilder sb = new StringBuilder();


for( Element element : doc.select("p") )
{
    /*
     * element.text() returns the text of this element (= without tags).
     */
    sb.append(element.text()).append('\n');
}

System.out.println(sb.toString().trim());

<强>输出:

test1 test2 test 3
test4