2016-02-27 61 views
0

我使用JSoup来更新一些服务器端HTML模板,其中有一些Freemarker标签。 JSoup不承认Freemarker的标签为有效的HTML(不够公平),并把它们转换成><例如:JSoup解析垃圾Freemarker标签

<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有一个白名单,大概我可以添加<#list>和其他Freemarker标签,但我没有看到一种方法将更新的白名单传递给parse()方法?

回答

2

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

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

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

2

有可能为你工作解决方法:FreeMarker的有在您使用[],而不是<>,像[#list things as thing]替代语法。它可以在FreeMarker配置中使用tagSyntax设置启用。 (或者,如果您使用[#ftl]开始模板,它将强制切换到替代语法。)