XML模板使用

本文介绍了如何利用XMLUtils类配合资源文件中的XML模板,在代码中高效地填充XML数据,避免手动拼接XML字符串的繁琐过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.  XML Utils 类:

import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.Namespace;
import org.dom4j.QName;
import org.dom4j.XPath;
import org.springframework.stereotype.Component;
import org.springframework.ui.freemarker.FreeMarkerTemplateUtils;
import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;


@Component
public class XmlUtils {
	
	/** 通过xml模板生产报文字符串 UTF-8 **/

	public String genrateMsgFromXml(Map<String, String> content,String templateFileName) throws IOException,TemplateException{  
	    String templatePath = "/templetes/"; // 报文模板路径  
	    String requestXml = ""; // 请求报文  
	  
	    Configuration config =  new Configuration(Configuration.VERSION_2_3_26) ;
	    config.setClassForTemplateLoading(this.getClass(), "/");  
	    Template template = config.getTemplate(templatePath + templateFileName, "UTF-8");
	    requestXml = FreeMarkerTemplateUtils.processTemplateIntoString(template, content);  
	    if (requestXml == null || "".equals(requestXml)) {  
	           return null;  
	    }  
	    // 返回报文字符串  
	    return requestXml;  
    }  
	
	/**
	 * 解析通知收到的xml,封装到map
	 * 
	 * @param xml
	 * @return
	 * @throws Exception
	 */
	public static Map parseXML(String xml, String path) throws Exception {
		Document doc = null;
		Map map = new HashMap();
		doc = DocumentHelper.parseText(xml);
		Element eRoot = doc.getRootElement();
		List<Element> eList = eRoot.selectNodes(path);
		for (Element ele : eList) {
			map.put(ele.getName(), ele.getTextTrim());
		}
		if (map.isEmpty()) {
			throw new Exception("解析通知xml错误!");
		}
		return map;
	}

	/**
	 *解析带名称空间的xml
	 * 
	 * @param xml
	 * @param path:传入格式为("ns:/节点名称") 如:"ns:UPS/ns:Request/ns:TxInfo"  符合xpath表达式
	 * @return
	 * @throws Exception
	 */
	public static Map parseXMLWithName(String xml, String path)
			throws Exception {
		Document document = DocumentHelper.parseText(xml);
		String uri = document.getRootElement().getNamespaceURI();	
		Map<String, String> map = new HashMap<String, String>();
		map.put("ns", uri);		
		XPath xpath = document.createXPath(path);
		xpath.setNamespaceURIs(map);
		Element el = (Element) xpath.selectNodes(document).get(0);
		List<Element> list = el.elements();
		Map newMap = new HashMap();
		for (Element element : list) {
			newMap.put(element.getName(), element.getTextTrim());
			// System.out.println(element.getText());
		}
		if(newMap ==null){
			throw new Exception("解析通知xml错误!");
		}
		return newMap;
	}
	
	public static void main(String[] args) {
		String xml ="<?xml version=\"1.0\" encoding=\"utf-8\"?><request><requestid>访问者id</requestid><pageactionin>" +
				     "<currentpagenum>当前页码</currentpagenum><rowsperpage>每页行数</rowsperpage> <pageaction>翻页动作</pageaction><topagenum>翻到哪一页</topagenum></pageactionin>" +
				     "<retrieveargs><hospitalid>医院代号</hospitalid><deptcode>科室代号</deptcode></retrieveargs></request>";
		try {
			Map map=XmlUtils.parseXML(xml, "\request");
			System.out.println(map);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}


2. 在resources 下 配置 xml模板 



3. 在代码中 填充xml数据


总结:使用xml模板 不用花很多时间去拼接 xml字符串。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值