Freemarker:从节点中删除特定属性

时间:2015-08-13 15:30:05

标签: freemarker

我有一个像这样的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;部分。

我该怎么做?

1 个答案:

答案 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="...">声明前缀。