在未使用或设置该节点内定义的Freemarker变量时删除XML节点

时间:2015-02-24 15:35:05

标签: java xml xpath freemarker

我的XML中定义了Freemarker变量$ {xyz},如下例所示。在针对Map处理此XML之后,我用相关值替换了Freemarker变量。

我想删除那些未使用freemarker变量的XML节点。

示例场景: 在具有Freemarker变量$ {xyz}的XML下面。我还有空节点,例如ShouldNotDelete节点。

Freemarker模板:

<property>
   <Address>
        <Organisation>${Organisation?c}</Organisation>
        <BuildingName>${BuildingName?c}</BuildingName>              
        <Town>${Town?c}</Town>
        <PostCode>${PostCode?c}</PostCode>
  </Address>
  <ShouldNotDelete></ShouldNotDelete>
</property>

我有一张地图

Map { “Organisation” : “abc” ,  “PostCode” : “ME165AB” }

此地图中缺少城镇和建筑物名称。

在处理Map并将相关值放入上面的XML之后,我得到以下结果XML:

结果XML:

<property>
   <Address>
        <Organisation>abc</Organisation>
        <BuildingName></BuildingName>               
        <Town></Town>
        <PostCode>ME165AB</PostCode>
  </Address>
  <ShouldNotDelete></ShouldNotDelete>
</property>

我希望删除未使用的freemarker节点。在上面的例子中,应该删除Town和BuildingName节点。因此,所需的理想输出低于:

理想的结果输出:

<property>
   <Address>
        <Organisation>abc</Organisation>
        <PostCode>ME165AB</PostCode>
  </Address>
  <ShouldNotDelete></ShouldNotDelete>
</property>

任何人都可以通过使用Freemarker模板语言(比如在节点之前使用&lt; #if&gt;&lt;#else&gt;)或使用Java逻辑来建议一个理想的答案。

1 个答案:

答案 0 :(得分:1)

你可以试试这个:

<property>
   <Address>
         <#if Organisation??>
             <Organisation>${Organisation?c}</Organisation>
         </#if>         
  </Address>
  <ShouldNotDelete></ShouldNotDelete>
</property>