XML模板使用

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 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 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 map = new HashMap();
		map.put("ns", uri);		
		XPath xpath = document.createXPath(path);
		xpath.setNamespaceURIs(map);
		Element el = (Element) xpath.selectNodes(document).get(0);
		List 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 ="访问者id" +
				     "当前页码每页行数 翻页动作翻到哪一页" +
				     "医院代号科室代号";
		try {
			Map map=XmlUtils.parseXML(xml, "\request");
			System.out.println(map);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}


2. 在resources 下 配置 xml模板 

XML模板使用_第1张图片


3. 在代码中 填充xml数据

XML模板使用_第2张图片

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

你可能感兴趣的:(utils,Java)