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. }
  113.  
  114. /**
  115. * 传入map 对象 返回 xml 节点
  116. * @param map
  117. * @param jycode
  118. * @return
  119. * @throws Exception
  120. */
  121. public String mapToXml_ygyy(Map map,String codename) throws Exception{
  122. //map 为null 的时候返回空节点
  123. codename= codename.toUpperCase();
  124. StringBuffer sb = new StringBuffer();
  125. sb.append("<"+codename+">");
  126. Iterator<Entry<String, String>> it = map.entrySet().iterator();
  127. while (it.hasNext()) {
  128. Map.Entry<String, String> entry = it.next();
  129. String key = entry.getKey().toUpperCase();
  130. String value = entry.getValue();
  131. sb.append("<"+key+">");
  132. sb.append(value);
  133. sb.append("</"+key+">");
  134. }
  135. sb.append("</"+codename+">");
  136. return sb.toString();
  137. }
  138. /**
  139. * 传入list 对象 返回 xml 节点 (会返回多个同级节点)
  140. * @param list list对象
  141. * @param codename 节点名称
  142. * @return
  143. * @throws Exception
  144. */
  145. public String ListToXml_ygyy(List<Map> list, String codename) throws Exception{
  146. codename = codename.toUpperCase();
  147. if(list.size()==0){
  148. return "";
  149. }
  150. StringBuffer sb = new StringBuffer();
  151. for (Map map : list) {
  152. sb.append("<"+codename+">");
  153. Iterator<Entry<String, String>> it = map.entrySet().iterator();
  154. while (it.hasNext()) {
  155. Map.Entry<String, String> entry = it.next();
  156. String key = entry.getKey().toUpperCase();
  157. String value = entry.getValue();
  158. sb.append("<"+key+">");
  159. sb.append(value);
  160. sb.append("</"+key+">");
  161. }
  162. sb.append("</"+codename+">");
  163. }
  164. return sb.toString();
  165. }
  166. /**
  167. * 添加子节点到 原来的节点里面
  168. * @param nowNode 目前的节点
  169. * @param addNode 要添加的节点
  170. * @throws Exception
  171. */
  172. public String addNode(String nowNode,String addNode) throws Exception{
  173. if("".equals(addNode) || "".equals(nowNode)){
  174. return nowNode;
  175. }
  176. addNode = "<root>"+addNode+"</root>";
  177. Document nowNode_doc = DocumentHelper.parseText(nowNode);
  178. Document addNode_doc = DocumentHelper.parseText(addNode); //要添加的xml的文档对象
  179. Element a1 = nowNode_doc.getRootElement();
  180. Element a2 = addNode_doc.getRootElement();//要添加的xml的文档对象
  181.  
  182. List<Element> listElement=a2.elements();//所有一级子节点的list
  183. for(Element e:listElement){//遍历所有一级子节点
  184. Element cloned = (Element) e.clone ();
  185. a1.add(cloned);
  186. }
  187. StringWriter sw = new StringWriter();
  188. XMLWriter writer = null;
  189. OutputFormat format = OutputFormat.createPrettyPrint();
  190. format.setEncoding("UTF-8"); // 设置XML文档的编码类型
  191. format.setIndent(true); // 设置是否缩进
  192. format.setIndent(" "); // 以空格方式实现缩进
  193. format.setNewlines(true); // 设置是否换行
  194. try {
  195. writer = new XMLWriter(format);
  196. writer.setWriter(sw);
  197. writer.write(nowNode_doc);
  198. writer.close();
  199. } catch (IOException e) {
  200. e.printStackTrace();
  201. }
  202. return sw.toString();
  203. }
  204. public String addNode1(String nowNode,String addNode) throws Exception{
  205. if("".equals(addNode) || "".equals(nowNode)){
  206. return nowNode;
  207. }
  208. Document nowNode_doc = DocumentHelper.parseText(nowNode);
  209. Document addNode_doc = DocumentHelper.parseText(addNode); //要添加的xml的文档对象
  210. Element a1 = nowNode_doc.getRootElement();
  211. Element a2 = addNode_doc.getRootElement();//要添加的xml的文档对象
  212. a1.add(a2);
  213. StringWriter sw = new StringWriter();
  214. XMLWriter writer = null;
  215. OutputFormat format = OutputFormat.createPrettyPrint();
  216. format.setEncoding("UTF-8"); // 设置XML文档的编码类型
  217. format.setIndent(true); // 设置是否缩进
  218. format.setIndent(" "); // 以空格方式实现缩进
  219. format.setNewlines(true); // 设置是否换行
  220. try {
  221. writer = new XMLWriter(format);
  222. writer.setWriter(sw);
  223. writer.write(nowNode_doc);
  224. writer.close();
  225. } catch (IOException e) {
  226. e.printStackTrace();
  227. }
  228. return sw.toString();
  229. }
  230. }

帮助小伙伴写的组装xml字符串类的更多相关文章

  1. 任务备忘(已经完成):用python写一个格式化xml字符串的程序

    功能: 1.将xml中多余的空格,换行符去掉,让xml字符串变成一行. 2.将xml中添加缩进,使用print能正确打印添加缩进后的字符串. 思路: 采用正则表达式来判断xml中字符串的类型: 1.文 ...

  2. XML Helper XML操作类

    写的一个XML操作类,包括读取/插入/修改/删除. using System;using System.Data;using System.Configuration;using System.Web ...

  3. C#:XML操作类

    写的一个XML操作类,包括读取/插入/修改/删除. using System; using System.Data; using System.Configuration; using System. ...

  4. C#操作xml完整类文件

    C#操作xml完整类文件 xml_oper.cs using ...System; using System.Data; using System.Web; using System.Xml; /** ...

  5. .NET解析xml字符串,通过反射给实体类对象赋值,获取实体类数据列表

    /// <summary> /// 解析xml字符串 转换为实体类列表数据 /// </summary> /// <param name="xmlStr&quo ...

  6. 为什么不用C++写游戏(聪明的程序员不用C++折磨自己)(这些工作,QT都替开发者解决了,C++没有根类导致太多的问题,也没有字符串类)

    当今世界上绝大多数游戏都是C++写的,为什么要说不呢? 要做什么?写游戏. 写游戏首先要考虑些什么?做什么样的游戏,图形.音效.游戏逻辑如何实现. 用C++要先考虑什么?定义跨平台数据类型抽象,实现常 ...

  7. dom4j组装xml 以及解析xml

    dom4j组装xml 以及解析xml: 1.下载dom4j的jar包,地址:https://dom4j.github.io/ 2.java代码: package test; import java.i ...

  8. Core Java 总结(字符和字符串类问题)

    所有代码均在本地编译运行测试,环境为 Windows7 32位机器 + eclipse Mars.2 Release (4.5.2) 2016-10-17 整理 字符,字符串类问题 正则表达式问题 J ...

  9. 将Xml字符串转换成(DataTable || DataSet || XML)对象

    今天用到一个功能:就是把从数据库读出来的内容转换成XML字符串流格式,并输出给一个功能函数.在写的过程,为方便以后的使用,我对这一功能进行分装.该类的具体格式如下:XmlConvert类命名空间:Ni ...

随机推荐

  1. ExtJs工具篇(2)——Aptana Studio 3 汉化

    本身用的是中文版本的,但是输入一些中文后,竟然有乱码,所以就想把它汉化.在网上搜索了一下,把步骤记录如下: 首先到这个网站去 http://aptana.com/support 选择View Docu ...

  2. 【目录】Spring 源码学习

    [目录]Spring 源码学习 jwfy 关注 2018.01.31 19:57* 字数 896 阅读 152评论 0喜欢 9 用来记录自己学习spring源码的一些心得和体会以及相关功能的实现原理, ...

  3. PHP将两个数组相加

    $arr_a=[1=>1,2=>2,3=>3];$arr_b=[1=>'a',4=>4];print_r($arr_a+$arr_b);返回结果:Array ( [1] ...

  4. python 学习总结----正则表达式

    正则表达式 应用场景 - 特定规律字符串的查找,切割,替换 - 邮箱格式:URl,IP地址等的校验 - 爬虫项目中,特定内容的提取 使用原则 - 只要使用字符串等函数能解决的问题,就不要使用正则 - ...

  5. react实现网站换肤功能

    一.目标   提供几种主题色给用户选择,然后根据用户的选择改变应用的主题色: 二.实现原理   1.准备不同主题色的样式文件:   2.将用户的选择记录在本地缓存中:   3.每次进入应用时,读取缓存 ...

  6. 输出1-n的全排(递归C++)

    [问题描述] 输出1到n之间所有不重复的排列,即1到n的全排,要求所产生的任一数列不含有重复的数字. [代码展示] #include<iostream>using namespace st ...

  7. Gitlab自动触发Jenkins构建项目

    Gitlab自动触发Jenkins构建项目 一.前提 Gitlab已安装配置好. Jenkins已安装Gitlab plugin. 二.配置jenkins中Job 1.勾选触发器下的gitlab触发器 ...

  8. UVA 11880 Ball in a Rectangle(数学+平面几何)

    Input: Standard Input Output: Standard Output � There is a rectangle on the cartesian plane, with bo ...

  9. 学习bash——环境配置

    一.环境配置文件的重要性 Bash在启动时直接读取这些配置文件,以规划好bash的操作环境. 即使注销bash,我们的设置仍然保存. 二.login shell 通过完整的登录流程取得的bash,称为 ...

  10. c#程序中的AssemblyInfo.cs

    在asp.net中有一个配置文件AssemblyInfo.cs主要用来设定生成的有关程序集的常规信息dll文件的一些参数,下面是默认的AssemblyInfo.cs文件的内容具体介绍 //是否符合公共 ...