java - 当未使用或设置节点内定义的 Freemarker 变量时删除 XML 节点

标签 java xml xpath freemarker

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

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

示例场景: 下面的 XML 具有 Freemarker 变量 ${xyz}。我在其中也有空节点,例如 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

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

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

处理 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 模板语言(例如在节点之前使用 <#if > <#else>)或使用 Java 逻辑来提出理想的答案吗?

最佳答案

你可以试试这个:

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

关于java - 当未使用或设置节点内定义的 Freemarker 变量时删除 XML 节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28699888/

相关文章:

java - Java 中的工作线程

java - 读取 .txt 文件并存储在二维字符数组 java

xml - 让 Vim 识别 XML

xml - 读取具有多个命名空间的子节点

php - DOMXpath - 获取 a 元素的 href 属性和文本值

java - 增变器方法不起作用,NetBeans

java - 部署期间的 Hibernate 异常

xml - xpath: 为每个子节点获取父节点的值

html - 使用 R 和 XPath,如何从结果中删除格式元素,例如\n 和\t?

java - 如何在 XSLT 中使用 XPath 获取元素数组,包括缺失的元素?