有这样一个数据结构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>
分享到:
相关推荐
例如,遍历List<Map>: ```freemarker <#list list as item> <#list item as key, value> Key: ${key}, Value: ${value} </#list> </#list> ``` 这里,外层`<#list>`遍历List,内层`<#list>`遍历每个Map的键值对...
- **Map对象**:Freemarker支持Java Map对象作为数据模型,键值对可以通过模板语法访问。 - ** Beans**:可以直接使用Java Bean对象,属性可以通过`.`操作符访问。 - **List和集合**:列表和集合可以通过`<#list>...
9. **条件判断和循环**:`<#if>`、`<#else>`、`<#elseif>`用于条件判断,`<#foreach>`遍历集合,`<#list>`则提供更灵活的列表处理。 10. **逻辑运算和比较**:Freemarker支持基本的逻辑运算符(`&&`、`||`、`!`)和...
5. 遍历:`<#list>`指令可以用来遍历List或其他集合类型的变量,例如`<#list users as user>`,在循环中可以访问每个用户的属性。 除了以上基础用法,Freemarker还支持更多的高级特性,如宏定义、指令嵌套、模板...
例如,`${expression}`用于插入变量值,`<#if condition>`和`<#else>`用于条件判断,`<#list items as item>`用于循环遍历。 2. 数据模型:Freemarker与Java对象交互的关键是数据模型。开发者将Java对象封装进一个`...
例如,`<#foreach item in list>...<#if item?last>...</#if></#foreach>`,可以遍历list中的每个元素,item?last判断是否为最后一个元素。 4. **#include指令**:插入其他模板文件,实现模板的复用。例如,`...
// 处理cellValue,例如存储到List或Map中 } } workbook.close(); fis.close(); ``` 读取Excel数据后,我们可以创建一个Word模板,使用` XWPFDocument `类来代表Word文档。这个模板可以包含占位符,这些占位符将...
这些对象可以是Java POJOs、Map、List等。 3. **模板语言(Template Language)**:FreeMarker的模板语言包含一系列指令和表达式,如`<#if>`、`<#foreach>`、`${}`等,用于控制模板的渲染逻辑。 ### FreeMarker ...
- `list`:用于遍历序列(如List、数组)。 - `include`:包含其他模板文件,可以传递参数和设置解析选项。 - `import`:导入其他模板中的宏或其他定义。 - `compress`:压缩输出的空白字符。 - `escape`、`...
3. **空标签**: `<#directivename parameter/>`,例如`<#list ... />`表示一个不需要配对的标签。 在使用FTL标签时需要注意: - 标签必须正确嵌套,不能交叉使用。 - 如果使用不存在的指令,FreeMarker会抛出错误...
- `<#foreach>`:循环遍历数组、集合或Map的键值对。 - `<#assign>`:定义变量,如`<#assign x = "Hello">`。 - `<#function>`:自定义函数,可以封装复杂的逻辑。 - `<#import>`和`<#include>`:导入其他模板或...
`<#list items as item>`可以遍历items,`<#break>`用于提前退出循环。 - **`include`**:用于包含其他模板,增强模板的复用性,如`<#include "header.ftl">`。 - **`import`**:导入Java类或者方法,使得在模板中...
首先,XML文件通常包含一系列的元素,这些元素通过开始标签和结束标签定义,并且可以嵌套在一起形成层级结构。在新闻应用中,每个新闻条目可能对应一个XML元素,元素内部则包含标题、作者、发布日期和内容等子元素。...
protected List<Content> getList(Map, TemplateModel> params, Environment env) throws TemplateException { Integer[] ids = DirectiveUtils.getIntArray(PARAM_IDS, params); if (ids != null) { //根据内容...