2011-03-18 76 views
3

我一直在使用JSoup來解析歌詞,它一直很好,直到現在,但遇到了問題。刪除HTML實體,同時保留與JSoup的換行

我可以用Node.html()返回所需的節點,它保留線的完整的HTML打破這樣:

Glóandi augu, silfurnátt 
<br />Bl&oacute;&eth; alv&ouml;ru, starir &aacute; 
<br />&Oacute;&eth;ur hundur er &iacute; v&iacute;gam&oacute;&eth;, &iacute; maga... m&eacute;r 
<br /> 
<br />Kolni&eth;ur gref, kvik sem dreg h&eacute;r 
<br />Kolni&eth;ur svart, hvergi bjart n&eacute; 

但不幸的副作用,你可以看到,保留HTML實體,並標籤。

但是,如果我用Node.text(),我能得到一個更好看的結果,自由的標籤和實體:

Glóandi augu, silfurnátt Blóð alvöru, starir á Óður hundur er í vígamóð, í maga... mér Kolniður gref, kvik sem dreg hér Kolniður svart, 

其中有去除換行符和壓縮成一條線的另一個不幸的副作用。

在調用Node.text()產生相同的結果之前,只需從節點中替換<br />即可,並且似乎該方法正在將文本壓縮到方法本身的一行中,忽略換行符。

是否有可能擁有兩全其美的世界,並且標籤和實體能夠正確替換以保留換行符,還是有另一種方法或方法來解碼實體並刪除標籤而無需手動替換它們?

回答

2

(免責聲明)我還沒有使用這個API ... ,但快速查看文檔建議您可以訪問每個後代節點並轉儲出其文本內容。當遇到特殊標籤如<br>時,可以插入中斷。

TextNode.getWholeText()調用也很有用。

+0

使用TextNode.createFromEncoded(歌詞,「aURI」);從HTML創建TextNode,然後使用getWholeText()獲取文本本身。它完全保留
,但完全替換了實體,並且我可以手動替換最小的HTML標記,所以謝謝:) – joshschreuder 2011-03-18 11:32:36

+0

應該提到我確實已經讀過API,但我明顯錯過了您指出的功能。 – joshschreuder 2011-03-18 12:58:32

1

基於從stackoverflow另一個答案,我增加了一些修復和與

String text = Jsoup.parse(html.replaceAll("(?i)<br[^>]*>", "br2nl").replaceAll("\n", "br2nl")).text(); 
    text = text.replaceAll("br2nl ", "\n").replaceAll("br2nl", "\n").trim(); 

希望來到這有助於