freemaker 遍历list嵌套map

有这样一个数据结构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>

你可能感兴趣的:(java,数据结构,xml)