最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

關(guān)于通用xml報(bào)文創(chuàng)建和解析方式

 更新時(shí)間:2025年08月28日 10:42:41   作者:Winson.J  
文章介紹簡(jiǎn)單XML報(bào)文的結(jié)構(gòu)特點(diǎn)(3-4層節(jié)點(diǎn))及使用Freemarker生成的方法,包括創(chuàng)建Maven項(xiàng)目、配置依賴、模板文件位置(resource目錄)和測(cè)試代碼示例,并預(yù)告后續(xù)將講解Freemarker模板語(yǔ)法

簡(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中的排序Comparator類用法詳解

    Java中的排序Comparator類用法詳解

    這篇文章主要介紹了Java中的排序Comparator類用法詳解,Comparator?類常作為?sorted()?方法的參數(shù)傳遞給?sorted?方法,用來(lái)解決給集合排序,自定義排序規(guī)則的問(wèn)題,需要的朋友可以參考下
    2023-08-08
  • 深度解析SpringBoot內(nèi)嵌Web容器

    深度解析SpringBoot內(nèi)嵌Web容器

    這篇文章主要給大家介紹SpringBoot的內(nèi)嵌Web容器,SpringBoot將Web容器進(jìn)行了內(nèi)嵌,我們只需要將項(xiàng)目打成一個(gè)jar包,就可以運(yùn)行了,大大省略了開(kāi)發(fā)成本,那么SpringBoot是怎么實(shí)現(xiàn)的呢,我們今天就來(lái)詳細(xì)介紹
    2023-06-06
  • Java日常記錄之查看Maven本地倉(cāng)庫(kù)的位置

    Java日常記錄之查看Maven本地倉(cāng)庫(kù)的位置

    這篇文章主要介紹了Maven本地倉(cāng)庫(kù)的用途和配置方法,它提供了查看、修改本地倉(cāng)庫(kù)路徑的步驟,包括檢查settings.xml文件、使用Maven命令和查看輸出日志,需要的朋友可以參考下
    2024-12-12
  • java并發(fā)無(wú)鎖多線程單線程示例詳解

    java并發(fā)無(wú)鎖多線程單線程示例詳解

    這篇文章主要為大家介紹了java并發(fā)無(wú)鎖多線程單線程示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-07-07
  • SpringBoot 策略模式實(shí)現(xiàn)切換上傳文件模式

    SpringBoot 策略模式實(shí)現(xiàn)切換上傳文件模式

    策略模式是指有一定行動(dòng)內(nèi)容的相對(duì)穩(wěn)定的策略名稱,這篇文章主要介紹了SpringBoot 策略模式 切換上傳文件模式,需要的朋友可以參考下
    2023-11-11
  • Java中連接Mongodb進(jìn)行增刪改查的操作詳解

    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
  • 詳解Java中Collections.sort排序

    詳解Java中Collections.sort排序

    Comparator是個(gè)接口,可重寫compare()及equals()這兩個(gè)方法,接下來(lái)通過(guò)本文給大家介紹Java中Collections.sort排序,需要的的朋友參考下吧
    2017-04-04
  • swagger文檔增強(qiáng)工具knife4j使用圖文詳解

    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)中文亂碼的解決方法

    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ù)

    這篇文章主要介紹了Java函數(shù)與算法Math函數(shù)總結(jié)與字符串轉(zhuǎn)換整數(shù),每天練一練,水平在不知不覺(jué)中提高,需要的朋友快過(guò)來(lái)看看吧
    2021-08-08

最新評(píng)論

丰顺县| 凌云县| 汽车| 华安县| 宁海县| 闽清县| 新建县| 岳阳市| 遂宁市| 唐河县| 壶关县| 大名县| 阿克苏市| 会同县| 镶黄旗| 常宁市| 长治县| 汨罗市| 靖远县| 梅州市| 汪清县| 乳山市| 自治县| 东辽县| 恩平市| 永平县| 海门市| 永善县| 墨脱县| 西和县| 高邮市| 连州市| 边坝县| 江城| 临城县| 岳西县| 楚雄市| 资溪县| 竹溪县| 淳安县| 吴桥县|