XML 拼接工具
import com.google.common.collect.Maps;
import java.nio.charset.Charset;
import java.util.Map;
import java.util.Map.Entry;
/**
* @Description
* @Author hongji
* @Date 2020-09-01 11:43:00
* @Version 1.0
**/
public class XmlEncodeModel {
// XML报文头
private Map<String,String> heads;
// XML报文数据
private Map<String,String> body;
private final String rootAlias = "Service";
private final String headAlias = "SysHead";
private final String bodyAlias = "Body";
public static XmlEncodeModel creatXml(){
return new XmlEncodeModel();
}
/**
* 往XML模型添加报文头
* @param key 数据名
* @param value 数据值
* @return
*/
public String setHeadParameter(String key,String value){
if(heads == null){
heads = Maps.newHashMap();
}
return heads.put(key, value);
}
/**
* 往XML模型添加报文数据
* @param key 数据名
* @param value 数据值
* @return
*/
public String setBodyParameter(String key,String value){
if(body == null){
body = Maps.newHashMap();
}
return body.put(key, value);
}
public String getHeadParameter(String key){
return heads!=null?heads.get(key):null;
}
public String getBodyParameter(String key){
return body!=null?body.get(key):null;
}
/** 产生模型对应的XML数据
* @param charset 编码
* @return
*/
public String toXml(Charset charset){
StringBuilder builder = new StringBuilder();
builder.append("<?xml version=\"1.0\" encoding=\"").append(charset.displayName()).append("\"?>");
builder.append("<").append(rootAlias).append(">");
xml(heads,headAlias,builder);
xml(body,bodyAlias,builder);
builder.append("</").append(rootAlias).append(">");
return builder.toString();
}
private void xml(Map<String,String> param, String alias, StringBuilder data){
data.append("<").append(alias).append(">");
if(param!=null){
for(Entry<String, String> keyVal:param.entrySet()){
if(keyVal!=null){
data.append("<").append(keyVal.getKey()).append(">");
data.append(keyVal.getValue()!=null?keyVal.getValue():"");
data.append("</").append(keyVal.getKey()).append(">");
}
}
}
data.append("</").append(alias).append(">");
}
/**
* 获取xml指定节点信息
* @param xmlStr xml文本
* @param field 指定节点
* @return
*/
@SneakyThrows
public static String getNode(String xmlStr, String field){
SAXReader reader = new SAXReader();
InputStream inputStream = new ByteArrayInputStream(xmlStr.getBytes());
Document document = reader.read(inputStream);
Element root = document.getRootElement();
List<Element> list = root.elements();
return list.get(0).element(field).getText();
}
public static void main(String[] args){
XmlEncodeModel xmlEncodeModel = XmlEncodeModel.creatXml();
// head
xmlEncodeModel.setHeadParameter("SvcCd",XMLUtils.getNode(orginMsgXml, SVCCD));
xmlEncodeModel.setHeadParameter("SvcScn",XMLUtils.getNode(orginMsgXml, SVCSCN));
xmlEncodeModel.setHeadParameter("CnsmrSysId","");
xmlEncodeModel.setHeadParameter("SvcSplrSeqNo","");
xmlEncodeModel.setHeadParameter("CnsmrSeqNo",TcpUtil.getCnsmrSeqNo(smsConfig.getSecNodeID(),date));
xmlEncodeModel.setHeadParameter("TxnDt",DateUtils.format(date,"yyyy-MM-dd"));
xmlEncodeModel.setHeadParameter("TxnTm",DateUtils.format(date,"HHMMSS"));
xmlEncodeModel.setHeadParameter("FileFlg","0");
xmlEncodeModel.setHeadParameter("TxnSt","F");
xmlEncodeModel.setHeadParameter("RetCd","111111");
xmlEncodeModel.setHeadParameter("RetMsg",StringUtils.object2String(r.get("msg")));
String xml = xmlEncodeModel.toXml(Charset.forName("UTF-8"));
System.out.println(xml);
}
}