在解析 HTML 字符串时保留非 html 标签

问题描述

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

中转义

我得到结果

" 测试 1 秒

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

“测试 1 s”。

任何帮助将不胜感激。

这是我的代码

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

解决方法

更新根据评论支持一级嵌套元素

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

时髦:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width,initial-scale=1.0">
    <title>formation vuejs</title>
    <script src="vue.js"></script>
</head>
<body>
    <h1>hello the devs</h1>
    <div id="app">
        <h4>{{ message }}</h4>
        <p>{{ instructor }}</p>
    </div>
    <script src="script.js"></script>
</body>
</html>

印刷品

@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