1

我在 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 字符而不去除换行符?

4

2 回答 2

15

你也可以这样做:

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) - 所以不删除换行符

于 2013-05-23T06:42:18.477 回答
4

你得到一个单行,因为text()删除所有空白字符。但是您可以使用 aStringBuilder并在其中插入每一行:

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
于 2013-01-22T10:44:53.180 回答