2013-01-22 62 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不會被刪除