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

Java 解析html字符串时保留非html标记,java,grails,groovy,jsoup,gsp,Java,Grails,Groovy,Jsoup,Gsp,我一直在一个项目中工作,在这个项目中,用户需要解析保存在数据库中的HTML数据。我使用了和JSOUP将值解析为HTML,例如:-“Test”。它可以正确地以特定的HTML格式显示-“测试”该文本。但是当标签中的文本被删除时,问题就出现了。例如,当我使用尖括号时,文本从JSOUP“Test 1s

我一直在一个项目中工作,在这个项目中,用户需要解析保存在数据库中的HTML数据。我使用了
和JSOUP将值解析为HTML,例如:-
“Test”
。它可以正确地以特定的HTML格式显示-“测试”该文本。但是当标签中的文本被删除时,问题就出现了。例如,当我使用尖括号时,文本从JSOUP
“Test 1s
我得到了结果

“测试1s

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

“测试1 s

任何帮助都将不胜感激

这是我的密码

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

@Grab(group='org.jsoup',module='jsoup',version='1.11.3')
导入org.jsoup.jsoup
导入org.jsoup.nodes.Document
导入org.jsoup.nodes.TextNode
def html=''
我的头衔
测试1 se TextNode的实例?e.text():e.toString()}.join()
打印文本
印刷品

Test 1 s< a test test 1<,tasa> <foo>
 this
</foo> zzz
测试1 s
要求还不完全清楚。您想如何处理类似
的事情,这应该如何进行
?根据html规则
@JeffScottBrown简言之,我希望在html解析过程中避免使用非html标记。如果白名单中未提及,Jsoup功能似乎会删除任何出现的标记。如果存在在jsoup中有其他这样的属性,这将是非常好的,但我找不到任何这样的属性。如果我得到任何这样的方法来解析唯一的html标记,避免其他非html标记,例如尖括号之类的标记,这将是非常有帮助的。@daggett是的,但是使用正则表达式来替换所有这样的事件似乎是非常烦人和错误的。你想用它做什么replaceAll?在上面的一条评论中,@noobCoder表示,他们希望防止
被删除,比如
这应该如何操作
。上面的解决方案没有考虑到这一点。仅供参考…这个答案在我离开上一条评论后已经更改。右。就像问题下的评论)“右”。就像问题下的评论”-我的评论是为了读者的利益,因为我的声明后来被编辑弄错了。我不是批评编辑。更新了答案以澄清问题。我希望人们理解,在这个世界上,一切都是不同步的。)