2013-01-22 95 views
1

下面我有在Java中的内容,我想脱光只有HTML标签,但不换行字符jsoup剥离只有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也删除换行符。

我的尝试: -

我也试图与\r\n更换</p>,然后做删除HTML标签

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

但仍Jsoup删除行结束字符(在调试器中我可以同时看到line1和line2)。

我该如何让Jsoup只剥离html字符而不是新行字符?

回答

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 
12

你也可以这样做:

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(fa lse) - 所以linebreaks不会被删除