JSoup解析垃圾Freemarker标签
问题描述:
我使用JSoup来更新一些服务器端HTML模板,其中有一些Freemarker标签。 JSoup不承认Freemarker的标签为有效的HTML(不够公平),并把它们转换成>
和<
例如:JSoup解析垃圾Freemarker标签
<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()
方法?
答
不,不幸的是,白名单功能只适用于clean()方法,而不适用于解析器。所以你不能轻松添加你的标签。
即使您使用xmlParser,它也不起作用,因为您的标签名称以#
开头。
我看到的唯一解决方案是在解析之前转换模板。例如与正则表达式。
答
有可能为你工作解决方法:FreeMarker的有在您使用[
和]
,而不是<
和>
,像[#list things as thing]
替代语法。它可以在FreeMarker配置中使用tagSyntax
设置启用。 (或者,如果您使用[#ftl]
开始模板,它将强制切换到替代语法。)