我有一个像这样的XML节点:
<#macro table>
<table [include all attributes except version]>
<#recurse>
</table>
</#macro>
我希望Freemarker能够回应&#34;这个,但排除版本属性,给出:
1 2,5 3,1
2 4,10 1,5
3 4,1 1,1
4 2,10 3,1
我相信我需要使用像这样的宏:
{1:[[2,5], [3,1]], 2:[[4,10], [1,5]],
3: [[4,1], [1,1]], 4: [[2,10], [3,1]]}
但我不知道&#39; [包括除版本之外的所有属性]&#39;部分。
我该怎么做?
答案 0 :(得分:1)
FreeMarker的XML包装器并不是真的用于将XML转换为类似的XML,它只是一种暴露数据的方式......但是,如果你稍微延伸一下,它毕竟是可能的(使用http://freemarker-online.kenshoo.com/):< / p>
模板:
<#visit doc>
<#macro table>
<table<@atts except=['a', 'c'] />>
<#recurse>
</table>
</#macro>
<#macro atts element=.node except=[]>
<#list element.@@ as att>
<#if !except?seqContains(att.@@qname)> ${att.@@qname}="${att?xml}"</#if><#t>
</#list>
</#macro>
数据模型:
doc=<table a="1" b='2' c='3' />
但是,如果您具有属于命名空间的属性,则会存在一些陷阱。然后,您需要使用<#ftl nsPrefixes="...">
声明前缀。