FreeMarker入门 生成xml模板

第一次写这个,只是按着自己想的来写,没有什么思路。。。。

https://blog.csdn.net/kangcool_sn/article/details/85096386

 

先建一个Person对象,也可以不用,只是为了封装数据好处理

 

public class Person {  
  
 private String name;  
 private String age;  
 private String birthday;  
 private String sex;  
public String getName() {  
    return name;  
}  
public void setName(String name) {  
    this.name = name;  
}  
public String getAge() {  
    return age;  
}  
public void setAge(String age) {  
    this.age = age;  
}  
public String getBirthday() {  
    return birthday;  
}  
public void setBirthday(String birthday) {  
    this.birthday = birthday;  
}  
public String getSex() {  
    return sex;  
}  
public void setSex(String sex) {  
    this.sex = sex;  
}  
}

 

 

 

 

 

 

 

 

 

 

创建工具类  这边把测试方法写在工具类中了,可以分离出去

 

 


import java.io.IOException;  
import java.io.StringWriter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;  
import java.util.Map;  
  
  
import freemarker.template.Configuration;  
import freemarker.template.Template;  
import freemarker.template.TemplateException;  
  
public class ObjectToXmlUtil  
{  
    /** 
     *  
     * @param xmlPath xml的路径 
     * @param xmlName xml的名称
     * @param code 数据编码格式 
     * @param dataMap 需要渲染到xml中的map数据 
     * @return xmlString
     */  
    public  String createXmlFile(String xmlPath,String xmlName,String code, Map dataMap)  
    {  
    String result = "";  
   
        //得FreeMarker配置对象
    // 创建Configuration对象  
        Configuration cfg = new Configuration();  
        //设置模板编码格式
        cfg.setEncoding(Locale.getDefault(),code); 
          
       


        //得FreeMarker的关键对象---------模板  
 
  
        // 创建Template对象  
        Template template = null;  
        try  
        {  
        // 设置FreeMarker的模版文件位置  
            cfg.setClassForTemplateLoading(this.getClass(),"");
        //cfg.setDirectoryForTemplateLoading(new File(xmlPath));
            template = cfg.getTemplate(xmlName);  
        }  
        catch (IOException e1)  
        {  
            e1.printStackTrace();  
        }  
        template.setEncoding(code);  
  
        //String path = ServletActionContext.getServletContext().getRealPath("/");  
  
       /* File dir = new File(path + htmlPath);  
        if (!dir.exists())  
        {  
            dir.mkdirs();  
        } */ 
  
       // File fileName = new java.io.File(path + htmlPath + htmlName);  
        //System.out.println("html file:" + fileName.getPath());  
  
        //Writer writer = null;  
        java.io.StringWriter w =new StringWriter();  
        try  
        {  
            // 生成xml
            template.process(dataMap, w);  
            System.out.println(w.toString());  
            result = w.toString();  
        }  
        catch (TemplateException e)  
        {  
            e.printStackTrace();  
        }  
        catch (IOException e)  
        {  
            e.printStackTrace();  
        }   
  
        return result;  
    }  


  public static void main(String args[]){
 
 ObjectToXmlUtil t = new ObjectToXmlUtil();
 Map map =t.demo();
 t.createXmlFile("","Person.xml","gbk", map);
  }
   
  private Map demo(){
 Person p =new Person();
 p.setName("李四");
 p.setAge("12");
 p.setBirthday("20161201");
 p.setSex("Y");
 Map map = new HashMap();
 map.put("t", p);
return map;
  }
  
    
}

 

 

 

创建自己要生成的xml模板样式,将数据写过来

 

 

<?xml version="1.0" encoding="gbk"?>
<root id="" comment="">
     <person>
        <name>${t.name}</name>
        <age>${t.age}</age>
        <birthday>${t.birthday}</birthday>
        <sex>${t.sex}</sex>
     </person>
</root>

 

 


最后输出结果,转成你想要的xml文件即可:

 

 

 

 

 

<?xml version="1.0" encoding="gbk"?>
<root id="" comment="">
     <person>
        <name>李四</name>
        <age>12</age>
        <birthday>20161201</birthday>
        <sex>Y</sex>
     </person>
</root>

 

 

 

xml模板中带有多条的同样处理方法

以上纯属一个小白的一点心得,勿喷

https://blog.csdn.net/kangcool_sn/article/details/85069434

 

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Freemarker是一个模板引擎,可以用来生成各种动态内容,包括XML。 要使用Freemarker生成动态XML,首先需要定义一个XML模板。这个模板中包含了XML的结构和一些占位符,用于插入动态数据。可以使用Freemarker的语法来定义这些占位符,比如使用<#if>标签来进行条件判断,或者使用<#list>标签来循环生成XML节点。 接下来,我们需要准备一些数据,用于填充XML模板中的占位符。这些数据可以是一个Java对象,也可以是一个Map对象。我们可以将这些数据传递给Freemarker模板引擎,并使用模板引擎的API来将数据模板进行合并,生成最终的动态XML生成动态XML的过程大致如下: 1. 定义XML模板,包含XML的结构和占位符。 2. 准备数据,用于填充占位符。 3. 使用Freemarker模板引擎将数据模板进行合并,生成最终的XML。 以下是一个简单示例,生成一个包含动态数据XMLXML模板 ("template.xml"): ```xml <root> <message>${message}</message> <items> <#list items as item> <item>${item}</item> </#list> </items> </root> ``` Java代码: ```java import freemarker.template.Configuration; import freemarker.template.Template; import freemarker.template.TemplateException; import java.io.IOException; import java.io.StringWriter; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class GenerateDynamicXml { public static void main(String[] args) { // 准备数据 Map<String, Object> data = new HashMap<>(); data.put("message", "Hello, Freemarker!"); List<String> items = new ArrayList<>(); items.add("Item 1"); items.add("Item 2"); items.add("Item 3"); data.put("items", items); // 配置Freemarker Configuration configuration = new Configuration(Configuration.VERSION_2_3_28); configuration.setClassForTemplateLoading(GenerateDynamicXml.class, "/"); configuration.setDefaultEncoding("UTF-8"); try { // 加载模板 Template template = configuration.getTemplate("template.xml"); // 合并数据模板 StringWriter writer = new StringWriter(); template.process(data, writer); // 打印生成XML System.out.println(writer.toString()); } catch (IOException | TemplateException e) { e.printStackTrace(); } } } ``` 以上代码会生成如下的动态XML: ```xml <root> <message>Hello, Freemarker!</message> <items> <item>Item 1</item> <item>Item 2</item> <item>Item 3</item> </items> </root> ``` 通过这个示例,我们可以看到,Freemarker非常灵活,可以根据数据动态生成各种格式的内容,包括XML

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值