帮助小伙伴写的组装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 }
时间: 2024-10-27 12:53:57

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

C#.NET 程序员的福利,自己写的一个XML操作类,可实现像jquery一样方便的xml操作,且不用专门去处理命名空间。

此工具是进入一家新公司之后实现的,主要是工作当中操作 xml 的时间太多,因为公司按任务计“工作量”,领导给我安排的时间远远不够完善此工具[悲哀的制度],虽然我也能直接在cs中直接中规中矩完成,但实在受不了那种重复和低效,所以此工具基础部分绝大部分时间是在家中加班完成,剩下应用于公司项目中之后,在公司改了一些BUG,差不多也用了半年多了,实在是很好用,现在也差不多稳定了,特分享出来,需要的直接拿去用吧,有BUG可以直接发消息给我沟通,不用谢.. 使用方法: x(filepath).Find("/

任务备忘:用python写一个格式化xml字符串的程序

功能: 1.将xml中多余的空格,换行符去掉,让xml字符串变成一行. 2.将xml中添加缩进,使用print能正确打印添加缩进后的字符串. 思路: 采用正则表达式来判断xml中字符串的类型: 1.文件头 2.判断元素的种类:带有属性的标签,没有属性的标签,标签内结束的标签,只含有文本的标签,不含有文本的标签. 3.根据标签的级别添加换行符后面的空格 '\n'+i*' ' 原文地址:https://www.cnblogs.com/kgtone/p/9601918.html

C#:XML操作类

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

为什么不用C++写游戏(这些工作,QT都替开发者解决了,C++没有根类导致太多的问题,也没有字符串类)

当今世界上绝大多数游戏都是C++写的,为什么要说不呢? 要做什么?写游戏. 写游戏首先要考虑些什么?做什么样的游戏,图形.音效.游戏逻辑如何实现. 用C++要先考虑什么?定义跨平台数据类型抽象,实现常用集合类,设计宏实现RTTI,写一个支持Unicode并可以和其他多种字符串类型互相转换的字符串类,自定义内存分配器,写个shared_ptr,组织预编译头文件,设计实现Object基类以处理跨DLL内存管理等问题…… 那么这些和做游戏有什么关系?不做好这些就很难开始写游戏. 做这些要话多少时间?很

[.net 面向对象程序设计进阶] (11) 序列化(Serialization)(三) 通过接口IXmlSerializable实现XML序列化及XML通用类

[.net 面向对象程序设计进阶] (11) 序列化(Serialization)(三) 通过接口IXmlSerializable实现XML序列化及XML通用类 本节导读:本节主要介绍通过序列化接口IXmlSerializable实现XML序列化和反序列化,整理了XML基础操作及序列化的通用类(包括XML及节点的基础读写操作,XML到DataSet\DataTable互转换操作,XML序列化及反序列化通用方法等). 读前必备: A.类和类的实例 [.net 面向对象编程基础]  (9) 类和类的

Java-封装生成JSON数据和XML数据类

1.背景 借鉴与php中 app接口的实现(php写app接口生成xml和json数据),封装了java版的json和xml数据操作类! 2.准备 在使用之前,需要引入 json 的jar 包:点我下载 ! 这里实现了,对象转json , 对象集合转json, 对象转xml,对象集合转xml ; 3.appUtil 工具类实现 具体的实现过程,我就不解释了,一边写,一边测试!直到写成为止! 里面的 tojsonArray() 方法 没有使用,可以删除,不过想生成json数组的 ,就不需要删除了!

dom4j组装xml 以及解析xml

dom4j组装xml 以及解析xml: 1.下载dom4j的jar包,地址:https://dom4j.github.io/ 2.java代码: package test; import java.io.File; import java.io.FileOutputStream; import java.io.FileWriter; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap;

一篇文章带你了解JavaScript中的基础算法之“字符串类”

作者 | Jeskson 来源 | 达达前端小酒馆 1 算法可以干什么呢?提高什么?有什么好处呢? 前端的同学需要提升编程核心内功,建立和健全算法知识体系,基础算法.数据结构.进阶算法,由浅入深讲解,透彻理解抽象算法,算法面试是关键一环,冲击大厂前端offer. 学习算法前掌握ES6哦!需要掌握单元测试的语言,Jest Jest is a delightful JavaScript Testing Framework with a focus on simplicity. It works wi

Android中Xml工具类的封装

Android中经常使用到操作XML,其中有一对XmlSerializer和XmlPullParser封装的很好,可是操作起来很复杂,虽然不难,但是感觉做了一点小事却写了一大堆的代码.有点烦,因此封装一下. 其思路为:根据传入的数据,获取字节码后进行反射解析,然后在存储.思路很简单,此demo只写了一个基本的List<T>类型的,其它类型道理与此大同小异,就当这个是抛砖引玉了. 对于一些Model可能有些字段是不需要序列化的,这里可以使用注解来操作 /** * XML操作工具类 * @auth