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">
<#list things as thing>
</#list>
</div>
当我打电话给Document doc = Jsoup.parse( theHtml );
我知道 JSoup 有一个白名单,大概我可以在其中添加 <#list>
和其他 Freemarker 标签,但我没有看到将更新后的白名单传递给 parse()
方法的方法?
【问题讨论】:
【参考方案1】:不,不幸的是,白名单功能仅适用于 clean() 方法,不适用于解析器。所以你不能轻易添加你的标签。
即使您使用 xmlParser,它也不起作用,因为您有一个以 #
开头的标签名称。
我看到的唯一解决方案是在解析之前转换模板。例如使用正则表达式。
【讨论】:
【参考方案2】:有一个可能对您有用的解决方法:FreeMarker 有另一种语法,您可以使用 [
和 ]
而不是 <
和 >
,就像在 [#list things as thing]
中一样。它可以在 FreeMarker 配置中使用tagSyntax
设置启用。 (或者,如果您以[#ftl]
开头模板,它将强制切换到替代语法。)
【讨论】:
以上是关于JSoup 解析垃圾 Freemarker 标签的主要内容,如果未能解决你的问题,请参考以下文章
使用 Google Refine/OpenRefine & Jsoup/BeautifulSoup 解析和删除 HTML 标签