使用freemarker生成xml模板

来源:互联网 发布:淘宝店铺的权重 编辑:程序博客网 时间:2024/04/30 15:57

今天在java交流群里有个人问我如何用freemarker生成xml模板文件,可以手动配置参数,于是我到网上百度了一下。发现有一位同行的博文写的很nice,于是我就照着他的代码敲了一遍,最后实现了,本想贴出他的uri的,但是找不到了。网上这样的例子很多,大家可以自己到网上看看,我的建议是一个问题多看几个解决方案,这样才能找到正确的或者是最优解。


其实要实现的功能就是简单的将红框中的内容简单替换

下面是java代码:

package createxml;import java.io.BufferedWriter;import java.io.File;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.OutputStreamWriter;import java.io.Writer;import java.util.HashMap;import java.util.Map;import freemarker.template.Configuration;import freemarker.template.Template;import freemarker.template.TemplateException;    public class XMLTest {                private Configuration configuration = null;                public XMLTest(){            configuration = new Configuration();            configuration.setDefaultEncoding("UTF-8");        }                public static void main(String[] args) {        XMLTest test = new XMLTest();            test.createWord();        }          public void createWord(){            Map<String,Object> dataMap=new HashMap<String,Object>();            getData(dataMap);            configuration.setClassForTemplateLoading(this.getClass(), "/createxml");  //FTL文件所存在的位置,我的只能放在与java相同的包下            Template t=null;            try {                t = configuration.getTemplate("xmltemp.ftl"); //文件名            } catch (IOException e) {                e.printStackTrace();            }            File outFile = new File("G:/outFilessa"+Math.random()*10000+".xml");  //生成文件的路径          Writer out = null;            try {                out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile)));            } catch (FileNotFoundException e1) {                e1.printStackTrace();            }                         try {                t.process(dataMap, out);            } catch (TemplateException e) {                e.printStackTrace();            } catch (IOException e) {                e.printStackTrace();            }        }        //这里赋值的时候需要注意,xml中需要的数据你必须提供给它,不然会报找不到某元素错的.      private void getData(Map<String, Object> dataMap) {            dataMap.put("domaintype", "mytype");        }    } 
然后是模板文件:


<domain type='${domaintype}'> <name>bjsxtvm03</name><memory unit='KiB'>1048576</memory><currentMemory unit='KiB'>1048576</currentMemory><vcpu placement='static'>1</vcpu><os><type arch='x86_64' machine='rhel6.6.0'>hvm</type><boot dev='hd'/></os><features><acpi/><apic/><pae/></features><clock offset='utc'/><on_poweroff>destroy</on_poweroff><on_reboot>restart</on_reboot><on_crash>restart</on_crash><devices><emulator>/usr/libexec/qemu-kvm</emulator><disk type='file' device='disk'><driver name='qemu' type='qcow2' cache='none'/><source file='/kvmtest/centos-6.6-04.qcow2'/><target dev='vda' bus='virtio'/><address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/></disk><disk type='block' device='cdrom'><driver name='qemu' type='raw'/><target dev='hdc' bus='ide'/><readonly/><address type='drive' controller='0' bus='1' target='0' unit='0'/></disk><controller type='usb' index='0' model='ich9-ehci1'><address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x7'/></controller><controller type='usb' index='0' model='ich9-uhci1'><master startport='0'/><address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0' multifunction='on'/></controller><controller type='usb' index='0' model='ich9-uhci2'><master startport='2'/><address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x1'/></controller><controller type='usb' index='0' model='ich9-uhci3'><master startport='4'/><address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x2'/></controller> <controller type='ide' index='0'> <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/> </controller><interface type='network'><source network='default'/><model type='virtio'/><address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/></interface><serial type='pty'><target port='0'/></serial><console type='pty'><target type='serial' port='0'/></console><input type='tablet' bus='usb'/><input type='mouse' bus='ps2'/><graphics type='vnc' port='-1' autoport='yes' listen='0.0.0.0'><listen type='address' address='0.0.0.0'/></graphics><video><model type='cirrus' vram='9216' heads='1'/><address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/></video><memballoon model='virtio'><address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/></memballoon></devices></domain>
这里要说明几点的是:

1,我自己测试的时候只能将模板文件放在java的包下,也就是和java同一个地方。


1 0