JSoup 解析垃圾 Freemarker 标签

Posted

技术标签:

【中文标题】JSoup 解析垃圾 Freemarker 标签【英文标题】:JSoup parse trashing Freemarker tags 【发布时间】:2016-06-10 19:34:28 【问题描述】:

我正在使用 JSoup 更新一些服务器端 html 模板,其中包含一些 Freemarker 标记。 JSoup 不会将 Freemarker 标签识别为有效的 HTML(足够公平)并将它们转换为 >< 例如:

<div class="row">
<#list things as thing> 
</#list>
</div>

转换为:

<div class="row">
&lt;#list things as thing&gt;
&lt;/#list&gt;
</div>

当我打电话给Document doc = Jsoup.parse( theHtml );

我知道 JSoup 有一个白名单,大概我可以在其中添加 &lt;#list&gt; 和其他 Freemarker 标签,但我没有看到将更新后的白名单传递给 parse() 方法的方法?

【问题讨论】:

【参考方案1】:

不,不幸的是,白名单功能仅适用于 clean() 方法,不适用于解析器。所以你不能轻易添加你的标签。

即使您使用 xmlParser,它也不起作用,因为您有一个以 # 开头的标签名称。

我看到的唯一解决方案是在解析之前转换模板。例如使用正则表达式。

【讨论】:

【参考方案2】:

有一个可能对您有用的解决方法:FreeMarker 有另一种语法,您可以使用 [] 而不是 &lt;&gt;,就像在 [#list things as thing] 中一样。它可以在 FreeMarker 配置中使用tagSyntax 设置启用。 (或者,如果您以[#ftl] 开头模板,它将强制切换到替代语法。)

【讨论】:

以上是关于JSoup 解析垃圾 Freemarker 标签的主要内容,如果未能解决你的问题,请参考以下文章

JSoup 解析带有未闭合标签的无效 HTML

如何避免在 Jsoup 解析中环绕 html 头标签

使用Jsoup解析HTML页面

使用 Google Refine/OpenRefine & Jsoup/BeautifulSoup 解析和删除 HTML 标签

jsoup怎么解析javascript动态改变html标签的属性值

爬取微博的数据时别人用的是FM.view方法传递html标签那么jsoup怎么解析呢