關(guān)于通用xml報(bào)文創(chuàng)建和解析方式
簡(jiǎn)單XML報(bào)文
簡(jiǎn)單XML是指結(jié)構(gòu)簡(jiǎn)單,沒(méi)有很多節(jié)點(diǎn)層次的報(bào)文。通常只有3到4層子節(jié)點(diǎn)。這種結(jié)構(gòu)很方便創(chuàng)建和解析 。
示例如下
<?xml version="1.0" encoding="UTF-8"?> <Message> <Head> <Element>10</Element> ......... </Head> <Body> <Element>00</Element> ......... </Body> </Message>
如上圖,根節(jié)點(diǎn)一層,head,body一層,具體業(yè)務(wù)要素一層。
Freemarker,強(qiáng)烈推薦組xml的工具
maven依賴
<!-- freemarker jar -->
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.20</version>
</dependency>
<!-- logback 日志工具 -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.7</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>1.1.7</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-access</artifactId>
<version>1.1.7</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.1.7</version>
</dependency>
建一個(gè)簡(jiǎn)單maven項(xiàng)目,引入依賴,創(chuàng)建工具類
package com.xml.create.utils;
import java.io.File;
import java.io.IOException;
import java.io.StringWriter;
import java.util.Map;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import freemarker.template.Configuration;
import freemarker.template.DefaultObjectWrapper;
import freemarker.template.Template;
import freemarker.template.TemplateException;
public class FreeMarkerUtil {
private static Logger logger = LoggerFactory.getLogger(FreeMarkerUtil.class);
public final static String TEMPLATE_SUFFIX = ".ftl";
private static Configuration tplConfig;
//模板文件存放目錄
private static String tplDir = "./config/templates";
private static String encoding = "UTF-8";
/**
* 加載所有模板文件
* @param tplFileName 模板文件的名稱
* @param dataMap 數(shù)據(jù)
* @return
*/
public static void loadTemplates() {
tplConfig = new Configuration();
try {
//加載文件系統(tǒng)下的模板,推薦
tplConfig.setDirectoryForTemplateLoading(new File(tplDir));
//加載類路徑下的模板,如果模板放在resource目錄下,使用這種方式
//這種方式不推薦,因?yàn)榇虬鼤r(shí),會(huì)打到j(luò)ar里,不方便修改模板
// tplConfig.setClassForTemplateLoading(FreeMarkerUtil.class, "/templates");
tplConfig.setObjectWrapper(new DefaultObjectWrapper());
tplConfig.setDefaultEncoding(encoding);
} catch (Exception e) {
logger.info("初始化FreeMarkerUtil: ", e);
}
}
/**
* 數(shù)據(jù)放在map里
* @param tplFileName 模板文件的名稱
* @param dataMap 數(shù)據(jù)
* @return
*/
public static String createXml(String tplFileName, Map<String, Object> dataMap) {
StringWriter out = null;
try {
Template template = tplConfig.getTemplate(tplFileName);
out = new StringWriter();
template.process(dataMap, out);
out.flush();
return out.toString();
} catch (IOException e) {
logger.info("IOException,組報(bào)文失敗: ", e);
} catch (TemplateException e) {
logger.info("TemplateException,組報(bào)文失敗: ", e);
}finally {
if (out != null) {
try {
out.close();
} catch (IOException e) {
}
}
}
return null;
}
/**
* 數(shù)據(jù)放在對(duì)象里
* @param tplFileName 模板文件的名稱
* @param dataMap 數(shù)據(jù)
* @return
*/
public static String createXml(String tplFileName, Object data) {
StringWriter out = null;
try {
Template template = tplConfig.getTemplate(tplFileName);
out = new StringWriter();
template.process(data, out);
out.flush();
return out.toString();
} catch (IOException e) {
logger.info("IOException,組報(bào)文失敗: ", e);
} catch (TemplateException e) {
logger.info("TemplateException,組報(bào)文失敗: ", e);
}finally {
if (out != null) {
try {
out.close();
} catch (IOException e) {
}
}
}
return null;
}
}
- 模板在resource下

- 模板在文件目錄里

模板文件test.ftl內(nèi)容
<?xml version="1.0" encoding="UTF-8"?>
<Message>
<Head>
<Test>${test}</Test>
</Head>
<Body>
<Test1>${test1}</Test1>
</Body>
</Message>
測(cè)試代碼
package com.xml.create;
import java.util.HashMap;
import java.util.Map;
import com.xml.create.utils.FreeMarkerUtil;
public class Test {
public static void main(String[] args) {
//加載模板
FreeMarkerUtil.loadTemplates();
String ftlName = "test.ftl";
//測(cè)試數(shù)據(jù)
Map<String, Object> dataMap = new HashMap<String, Object>();
dataMap.put("test", "aaaa");
dataMap.put("test1", "bbb");
//按模板配置生成字符串
String xml = FreeMarkerUtil.createXml(ftlName, dataMap);
System.out.println(xml);
}
}
- 結(jié)果:

后續(xù)介紹,F(xiàn)reemarker模板文件的常用語(yǔ)法,如判空,循環(huán)等
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java日常記錄之查看Maven本地倉(cāng)庫(kù)的位置
這篇文章主要介紹了Maven本地倉(cāng)庫(kù)的用途和配置方法,它提供了查看、修改本地倉(cāng)庫(kù)路徑的步驟,包括檢查settings.xml文件、使用Maven命令和查看輸出日志,需要的朋友可以參考下2024-12-12
SpringBoot 策略模式實(shí)現(xiàn)切換上傳文件模式
策略模式是指有一定行動(dòng)內(nèi)容的相對(duì)穩(wěn)定的策略名稱,這篇文章主要介紹了SpringBoot 策略模式 切換上傳文件模式,需要的朋友可以參考下2023-11-11
Java中連接Mongodb進(jìn)行增刪改查的操作詳解
MongoDB是一個(gè)基于分布式文件存儲(chǔ)的數(shù)據(jù)庫(kù),由C++語(yǔ)言編寫,旨在為WEB應(yīng)用提供可擴(kuò)展的高性能數(shù)據(jù)存儲(chǔ)解決方案,本文給大家介紹了Java中連接Mongodb進(jìn)行操作,文中有詳細(xì)的代碼示例供大家參考,需要的朋友可以參考下2024-06-06
swagger文檔增強(qiáng)工具knife4j使用圖文詳解
這篇文章主要介紹了swagger文檔增強(qiáng)工具knife4j使用詳解,想要使用knife4j非常簡(jiǎn)單,只要在Springboot項(xiàng)目中引入knife4j的依賴即可,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),需要的朋友可以參考下2022-08-08
Java讀取properties配置文件時(shí),出現(xiàn)中文亂碼的解決方法
下面小編就為大家?guī)?lái)一篇Java讀取properties配置文件時(shí),出現(xiàn)中文亂碼的解決方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-11-11
每天練一練Java函數(shù)與算法Math函數(shù)總結(jié)與字符串轉(zhuǎn)換整數(shù)
這篇文章主要介紹了Java函數(shù)與算法Math函數(shù)總結(jié)與字符串轉(zhuǎn)換整數(shù),每天練一練,水平在不知不覺(jué)中提高,需要的朋友快過(guò)來(lái)看看吧2021-08-08

