帮助小伙伴写的组装xml字符串类

  1 import java.io.IOException;
  2 import java.io.StringWriter;
  3 import java.util.ArrayList;
  4 import java.util.HashMap;
  5 import java.util.Iterator;
  6 import java.util.List;
  7 import java.util.Map;
  8 import java.util.Map.Entry;
  9 import org.dom4j.Document;
 10 import org.dom4j.DocumentHelper;
 11 import org.dom4j.Element;
 12 import org.dom4j.io.OutputFormat;
 13 import org.dom4j.io.XMLWriter;
 14 
 15 public class XMLUtilTest {
 16 
 17     /**
 18      * @param args
 19      * @throws Exception 
 20      */
 21     public static void main(String[] args) throws Exception {
 22         XMLUtilTest a  = new XMLUtilTest();
 23         Map  map = new HashMap();
 24         String a1 = a.mapToXml_ygyy(map, "msg"); 
 25         //给msg节点 添加一个新的 节点 head 
 26         map = new HashMap();
 27         map.put("VER", "1.0");
 28         map.put("YLJGDM", "1001");
 29         String a2 = a.mapToXml_ygyy(map, "head"); 
 30         a1 = a.addNode(a1, a2) ;
 31         // 获取 体征信息 
 32         map = new HashMap();
 33         map.put("SG", "170");
 34         map.put("TZ", "60");
 35         String  tzxx = a.mapToXml_ygyy(map, "TZXX") ; //体征 
 36         List<Map> list =  new ArrayList<Map>();
 37         for (int i = 0; i < 3; i++) {
 38             map = new HashMap();
 39             map.put("ZDXH", "1");
 40             map.put("JZZDBM", "152w");
 41             map.put("JZZDSM", "上呼吸道感染");
 42             list.add(map);
 43         }
 44         String zdxx = a.ListToXml_ygyy(list, "zd");  //诊断 
 45         map = new HashMap();
 46         map.put("zs", "患者向医师描述的对自身本次疾病相关的感受的主要记录最大长度500字节");
 47         map.put("ZZMS", "生病了");
 48         String body = a.mapToXml_ygyy(map, "body");
 49         
 50         map = new HashMap();
 51         map.put("YZID", "11");
 52         map.put("YYXMMC", "氯化钠");
 53         String YP = a.mapToXml_ygyy(map, "YP");
 54         String FYP = a.mapToXml_ygyy(map, "FYP");
 55         String PRESCRIPTION = a.mapToXml_ygyy(new HashMap(), "PRESCRIPTION");
 56         PRESCRIPTION = a.addNode(PRESCRIPTION, YP);
 57         PRESCRIPTION = a.addNode(PRESCRIPTION, FYP);
 58         
 59         map = new HashMap();
 60         map.put("YYKSMC", "内科");
 61         body = a.mapToXml_ygyy(map, "body");
 62         body = a.addNode1(body, PRESCRIPTION);
 63         
 64         a1 = a.addNode1(a1, body); //添加节点body到 msg节点是时候用 addNode1方法 
 65         System.out.println(a1);
 66     }
 67     
 68     /**
 69      * 组装xml 字符串 
 70      * @param map  数据对象 map 
 71      * @param jycode  交易码
 72      * @throws IOException
 73      */
 74     public String mapToXml(Map map,String jycode) throws Exception{
 75         StringBuffer sb = new StringBuffer();
 76         String userid = "",password = "",trans_no=jycode;
 77         sb.append("<?xml version="1.0" encoding="utf-8"?>");
 78         sb.append("<body><head><userid>"+userid+"</userid><password>"+password+"</password><trans_no>"+trans_no+"</trans_no></head>");
 79         sb.append("<resquest><"+jycode+">");
 80         Iterator<Entry<String, String>> it = map.entrySet().iterator();
 81         while (it.hasNext()) {
 82             Map.Entry<String, String> entry = it.next();
 83             String key = entry.getKey().toUpperCase();
 84             String value = entry.getValue();
 85             sb.append("<"+key+">");
 86             sb.append(value);
 87             sb.append("</"+key+">");
 88         }
 89         sb.append("</"+jycode+"></resquest></body>");
 90         return sb.toString();
 91     }
 92     /**
 93      * 解析接口返回字符串  返回map对象
 94      * @param xml 中医馆接口 返回的xml 字符串
 95      * @return
 96      * @throws Exception
 97      */
 98     public Map xmlTomap(String xml)  throws Exception{
 99         Map map = new HashMap();
100         Document document = DocumentHelper.parseText(xml);
101         Element root = document.getRootElement();   // 根节点body
102         Element response=root.element("response");  
103         Element ret_code=response.element("ret_code"); 
104         Element ret_info=response.element("ret_info"); 
105         String code = ret_code.getText().trim();
106         String codeName = ret_code.getName();
107         String content = ret_info.getText().trim();
108         String contentName = ret_info.getName();
109         map.put(codeName, code);
110         map.put(contentName, content);
111         return map;
112     }    
115     
117     /**
118      *  传入map 对象 返回 xml 节点  
119      * @param map
120      * @param jycode
121      * @return
122      * @throws Exception
123      */
124     public String mapToXml_ygyy(Map map,String codename) throws Exception{
125         //map  为null 的时候返回空节点  
126         codename= codename.toUpperCase();  
127         StringBuffer sb = new StringBuffer();
128         sb.append("<"+codename+">");
129         Iterator<Entry<String, String>> it = map.entrySet().iterator();
130         while (it.hasNext()) {
131             Map.Entry<String, String> entry = it.next();
132             String key = entry.getKey().toUpperCase();
133             String value = entry.getValue();
134             sb.append("<"+key+">");
135             sb.append(value);
136             sb.append("</"+key+">");
137         }
138         sb.append("</"+codename+">");
139         return sb.toString();
140     }
141     /**
142      * 传入list 对象 返回 xml 节点  (会返回多个同级节点)
143      * @param list  list对象 
144      * @param codename 节点名称 
145      * @return 
146      * @throws Exception
147      */
148     public String ListToXml_ygyy(List<Map> list, String codename) throws Exception{
149         codename = codename.toUpperCase();
150         if(list.size()==0){
151             return "";
152         }
153         StringBuffer sb = new StringBuffer();
154         for (Map map : list) {
155             sb.append("<"+codename+">");
156             Iterator<Entry<String, String>> it = map.entrySet().iterator();
157             while (it.hasNext()) {
158                 Map.Entry<String, String> entry = it.next();
159                 String key = entry.getKey().toUpperCase();
160                 String value = entry.getValue();
161                 sb.append("<"+key+">");
162                 sb.append(value);
163                 sb.append("</"+key+">");
164             }
165             sb.append("</"+codename+">");
166         }
167         return sb.toString();
168     }
169     /**
170      * 添加子节点到 原来的节点里面 
171      * @param nowNode  目前的节点
172      * @param addNode  要添加的节点
173      * @throws Exception
174      */
175     public String addNode(String nowNode,String addNode) throws Exception{
176         if("".equals(addNode) || "".equals(nowNode)){
177             return nowNode;
178         }
179         addNode = "<root>"+addNode+"</root>";
180         Document nowNode_doc = DocumentHelper.parseText(nowNode);
181         Document addNode_doc = DocumentHelper.parseText(addNode); //要添加的xml的文档对象 
182         Element a1 = nowNode_doc.getRootElement();
183         Element a2 = addNode_doc.getRootElement();//要添加的xml的文档对象 
184         
185         List<Element> listElement=a2.elements();//所有一级子节点的list 
186         for(Element e:listElement){//遍历所有一级子节点  
187             Element cloned = (Element) e.clone ();
188             a1.add(cloned);
189         }
190         StringWriter sw = new StringWriter();
191         XMLWriter writer = null;
192         OutputFormat format = OutputFormat.createPrettyPrint();
193         format.setEncoding("UTF-8"); // 设置XML文档的编码类型 
194         format.setIndent(true);    // 设置是否缩进 
195         format.setIndent("   ");   // 以空格方式实现缩进 
196         format.setNewlines(true);  // 设置是否换行 
197         try {
198             writer = new XMLWriter(format);
199             writer.setWriter(sw);
200             writer.write(nowNode_doc);
201             writer.close();
202         } catch (IOException e) {
203             e.printStackTrace();
204         }
205         return sw.toString();
206     }
207     public String addNode1(String nowNode,String addNode) throws Exception{
208         if("".equals(addNode) || "".equals(nowNode)){
209             return nowNode;
210         }
211         Document nowNode_doc = DocumentHelper.parseText(nowNode);
212         Document addNode_doc = DocumentHelper.parseText(addNode); //要添加的xml的文档对象 
213         Element a1 = nowNode_doc.getRootElement();
214         Element a2 = addNode_doc.getRootElement();//要添加的xml的文档对象 
215         a1.add(a2);
216         StringWriter sw = new StringWriter();
217         XMLWriter writer = null;
218         OutputFormat format = OutputFormat.createPrettyPrint();
219         format.setEncoding("UTF-8"); // 设置XML文档的编码类型 
220         format.setIndent(true);    // 设置是否缩进 
221         format.setIndent("   ");   // 以空格方式实现缩进 
222         format.setNewlines(true);  // 设置是否换行 
223         try {
224             writer = new XMLWriter(format);
225             writer.setWriter(sw);
226             writer.write(nowNode_doc);
227             writer.close();
228         } catch (IOException e) {
229             e.printStackTrace();
230         }
231         return sw.toString();
232     }
233 }
原文地址:https://www.cnblogs.com/lishupeng/p/5601860.html