解析html字符串时保留非html标记



我一直在一个项目中工作,该项目中用户需要解析保存在数据库中的HTML数据的功能。我已经使用<div>和JSOUP将值解析为HTML,例如:-<b>"Test"</b>。它可以正确地显示-"strong>";测试"该特定HTML格式的文本。但是,当标签中的文本被删除时,问题就出现了。例如,当我有角括号<gt;文本从JSOUP<b>"Test 1 s< a test test 1<,tasa>"</b>中转义

我得到结果

";测试1 s

其他文本将被删除。我需要显示整个

";测试1s<测试测试1<,tasa>">

任何帮助都将不胜感激。

这是我的代码

def html = URLDecoder.decode(testValue.getAt('Test').replaceAll("%(?![0-9a-fA-F]{2})", "%25"),"UTF-8")
Jsoup.clean(html, Whitelist.basic())

根据注释更新以支持一级嵌套元素

为了支持递归嵌套元素,必须审查代码

groovy:

@Grab(group='org.jsoup', module='jsoup', version='1.11.3')
import org.jsoup.Jsoup
import org.jsoup.nodes.Document
import org.jsoup.nodes.TextNode
def html = '''
<html>
<title>my title</title>
<body>
<b>Test 1 s< a test test 1<,tasa> <foo>this</foo> zzz</b>
</body>
</html>'''
Document doc = Jsoup.parse(html)
def txt = doc.select('html body b').first()?.childNodes()
.collect{e-> e instanceof TextNode ? e.text() : e.toString() }.join()
println txt

打印

Test 1 s< a test test 1<,tasa> <foo>
this
</foo> zzz

相关内容

  • 没有找到相关文章

最新更新