簡體   English   中英

刪除HTML實體,同時使用JSoup保留換行符

[英]Removing HTML entities while preserving line breaks with JSoup

我一直在用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 />產生相同的結果,並且似乎該方法將文本壓縮到方法本身的單行上,忽略換行符。

是否可以充分利用這兩個世界,並且正確地替換標簽和實體以保留換行符,或者是否有另一種解碼實體和刪除標簽的方法或方法而無需手動替換它們?

(免責聲明)我沒有使用過這個API ......但是快速查看文檔表明您可以訪問每個后代節點並轉儲其文本內容。 當遇到像<br>這樣的特殊標簽時,可以插入中斷。

TextNode.getWholeText()調用看起來也很有用。

根據stackoverflow的另一個答案,我添加了一些修復程序並附帶了

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

希望這可以幫助

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM