繁体   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