有这样一个数据结构List<Map<String, Object>> items = ...,需求是将这个List中的数据映射到一个xml文件中。技术用到freemaker。使用freemaker的目的就是使得数据和数据的展现形式分离。
1.程序如下:
List<Map<String, Object>> items = ...
Map<String, Object> root = new HashMap<String, Object>();
root.put("taskId", taskId + "");
root.put("items", items);
root.put("tasks", tasks);
java.io.StringWriter w = new StringWriter();
temp.process(root, w);
2.模板如下:
<?xml version="1.0" encoding="utf-8" ?>
<function id="${taskId}" name="default" desc="默认配置文件">
<#if items?size != 0>
<#list items as item>
<item key="${item["ITEMKEY"]}" value="${item["ITEMNAME"]}" desc="${item["ITEMDESC"]?if_exists}" />
</#list>
</#if>
<#list tasks as task>
<component id="${task["PROGRAMID"]}" name="${task["TASKNAME"]}" desc="${task["TASKNAME"]?if_exists}">
<#if task["items"]?size != 0>
<#list task["items"] as item>
<item key="${item["ITEMKEY"]}" value="${item["ITEMNAME"]}" desc="${item["ITEMDESC"]?if_exists}" />
</#list>
</#if>
</component>
</#list>
</function>
3.生成的xml文件按如下:
<?xml version="1.0" encoding="utf-8" ?>
<function id="8001" name="default" desc="默认配置文件">
<item key="sender" value="dy.cn" desc="发件人姓名" />
<item key="server" value="mail.n" desc="服务器地址" />
<item key="user" value="n" desc="用户名" />
<item key="password" value="n" desc="密码" />
<item key="subject" value="警" desc="题" />
<item key="receiverlist" value=""
desc="" />
<item key="defaultproduct" value="1" desc="组" />
<item key="mobilelist" value="13812345678" desc="表" />
<component id="GatewayStateRule" name="GatewayStateRule"
desc="规则">
<item key="duration" value="600" desc="时长" />
<item key="mode" value="1,2" desc="邮件" />
<item key="times" value="3" desc="数" />
<item key="interval" value="3" desc="报" />
<item key="message" value="信息" />
<item key="alertedtimes" value="0" desc="数" />
<item key="lastalerttime" value="1978-1-1 00:00:00" desc="间" />
</component>
</function>