import java.io.IOException;
import java.io.StringWriter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter; public class XMLUtilTest { /**
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
XMLUtilTest a = new XMLUtilTest();
Map map = new HashMap();
String a1 = a.mapToXml_ygyy(map, "msg");
//给msg节点 添加一个新的 节点 head
map = new HashMap();
map.put("VER", "1.0");
map.put("YLJGDM", "1001");
String a2 = a.mapToXml_ygyy(map, "head");
a1 = a.addNode(a1, a2) ;
// 获取 体征信息
map = new HashMap();
map.put("SG", "170");
map.put("TZ", "60");
String tzxx = a.mapToXml_ygyy(map, "TZXX") ; //体征
List<Map> list = new ArrayList<Map>();
for (int i = 0; i < 3; i++) {
map = new HashMap();
map.put("ZDXH", "1");
map.put("JZZDBM", "152w");
map.put("JZZDSM", "上呼吸道感染");
list.add(map);
}
String zdxx = a.ListToXml_ygyy(list, "zd"); //诊断
map = new HashMap();
map.put("zs", "患者向医师描述的对自身本次疾病相关的感受的主要记录最大长度500字节");
map.put("ZZMS", "生病了");
String body = a.mapToXml_ygyy(map, "body"); map = new HashMap();
map.put("YZID", "11");
map.put("YYXMMC", "氯化钠");
String YP = a.mapToXml_ygyy(map, "YP");
String FYP = a.mapToXml_ygyy(map, "FYP");
String PRESCRIPTION = a.mapToXml_ygyy(new HashMap(), "PRESCRIPTION");
PRESCRIPTION = a.addNode(PRESCRIPTION, YP);
PRESCRIPTION = a.addNode(PRESCRIPTION, FYP); map = new HashMap();
map.put("YYKSMC", "内科");
body = a.mapToXml_ygyy(map, "body");
body = a.addNode1(body, PRESCRIPTION); a1 = a.addNode1(a1, body); //添加节点body到 msg节点是时候用 addNode1方法
System.out.println(a1);
} /**
* 组装xml 字符串
* @param map 数据对象 map
* @param jycode 交易码
* @throws IOException
*/
public String mapToXml(Map map,String jycode) throws Exception{
StringBuffer sb = new StringBuffer();
String userid = "",password = "",trans_no=jycode;
sb.append("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
sb.append("<body><head><userid>"+userid+"</userid><password>"+password+"</password><trans_no>"+trans_no+"</trans_no></head>");
sb.append("<resquest><"+jycode+">");
Iterator<Entry<String, String>> it = map.entrySet().iterator();
while (it.hasNext()) {
Map.Entry<String, String> entry = it.next();
String key = entry.getKey().toUpperCase();
String value = entry.getValue();
sb.append("<"+key+">");
sb.append(value);
sb.append("</"+key+">");
}
sb.append("</"+jycode+"></resquest></body>");
return sb.toString();
}
/**
* 解析接口返回字符串 返回map对象
* @param xml 中医馆接口 返回的xml 字符串
* @return
* @throws Exception
*/
public Map xmlTomap(String xml) throws Exception{
Map map = new HashMap();
Document document = DocumentHelper.parseText(xml);
Element root = document.getRootElement(); // 根节点body
Element response=root.element("response");
Element ret_code=response.element("ret_code");
Element ret_info=response.element("ret_info");
String code = ret_code.getText().trim();
String codeName = ret_code.getName();
String content = ret_info.getText().trim();
String contentName = ret_info.getName();
map.put(codeName, code);
map.put(contentName, content);
return map;
} /**
* 传入map 对象 返回 xml 节点
* @param map
* @param jycode
* @return
* @throws Exception
*/
public String mapToXml_ygyy(Map map,String codename) throws Exception{
//map 为null 的时候返回空节点
codename= codename.toUpperCase();
StringBuffer sb = new StringBuffer();
sb.append("<"+codename+">");
Iterator<Entry<String, String>> it = map.entrySet().iterator();
while (it.hasNext()) {
Map.Entry<String, String> entry = it.next();
String key = entry.getKey().toUpperCase();
String value = entry.getValue();
sb.append("<"+key+">");
sb.append(value);
sb.append("</"+key+">");
}
sb.append("</"+codename+">");
return sb.toString();
}
/**
* 传入list 对象 返回 xml 节点 (会返回多个同级节点)
* @param list list对象
* @param codename 节点名称
* @return
* @throws Exception
*/
public String ListToXml_ygyy(List<Map> list, String codename) throws Exception{
codename = codename.toUpperCase();
if(list.size()==0){
return "";
}
StringBuffer sb = new StringBuffer();
for (Map map : list) {
sb.append("<"+codename+">");
Iterator<Entry<String, String>> it = map.entrySet().iterator();
while (it.hasNext()) {
Map.Entry<String, String> entry = it.next();
String key = entry.getKey().toUpperCase();
String value = entry.getValue();
sb.append("<"+key+">");
sb.append(value);
sb.append("</"+key+">");
}
sb.append("</"+codename+">");
}
return sb.toString();
}
/**
* 添加子节点到 原来的节点里面
* @param nowNode 目前的节点
* @param addNode 要添加的节点
* @throws Exception
*/
public String addNode(String nowNode,String addNode) throws Exception{
if("".equals(addNode) || "".equals(nowNode)){
return nowNode;
}
addNode = "<root>"+addNode+"</root>";
Document nowNode_doc = DocumentHelper.parseText(nowNode);
Document addNode_doc = DocumentHelper.parseText(addNode); //要添加的xml的文档对象
Element a1 = nowNode_doc.getRootElement();
Element a2 = addNode_doc.getRootElement();//要添加的xml的文档对象 List<Element> listElement=a2.elements();//所有一级子节点的list
for(Element e:listElement){//遍历所有一级子节点
Element cloned = (Element) e.clone ();
a1.add(cloned);
}
StringWriter sw = new StringWriter();
XMLWriter writer = null;
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("UTF-8"); // 设置XML文档的编码类型
format.setIndent(true); // 设置是否缩进
format.setIndent(" "); // 以空格方式实现缩进
format.setNewlines(true); // 设置是否换行
try {
writer = new XMLWriter(format);
writer.setWriter(sw);
writer.write(nowNode_doc);
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
return sw.toString();
}
public String addNode1(String nowNode,String addNode) throws Exception{
if("".equals(addNode) || "".equals(nowNode)){
return nowNode;
}
Document nowNode_doc = DocumentHelper.parseText(nowNode);
Document addNode_doc = DocumentHelper.parseText(addNode); //要添加的xml的文档对象
Element a1 = nowNode_doc.getRootElement();
Element a2 = addNode_doc.getRootElement();//要添加的xml的文档对象
a1.add(a2);
StringWriter sw = new StringWriter();
XMLWriter writer = null;
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("UTF-8"); // 设置XML文档的编码类型
format.setIndent(true); // 设置是否缩进
format.setIndent(" "); // 以空格方式实现缩进
format.setNewlines(true); // 设置是否换行
try {
writer = new XMLWriter(format);
writer.setWriter(sw);
writer.write(nowNode_doc);
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
return sw.toString();
}
}

帮助小伙伴写的组装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. 使用localStorage,sessionStorage,cookie等存储

    Web 存储 API 提供了 sessionStorage (会话存储) 和 localStorage(本地存储)两个存储对象来对网页的数据进行添加.删除.修改.查询操作. 特点: localStor ...

  2. 加载旋转框(loading spinner)

    目标是这样的 用到的组件 AlertDialog 和 ProgressBar 先创建一个 AlertDialog 的布局 <?xml version="1.0" encodi ...

  3. SXOI2018游记

    day0 动身去太原.太原五中虽然挺小的但是很好看啊qwq(进门口一个"通天堂"(逃 试机.似乎看到了__stdcall!!然而没敢去认orz.linux选手似乎是9个.准考证(一 ...

  4. 圣思源Java视频36节练习源码分享(自己的190+行代码对比老师的39行代码)

    题目: * 随机生成50个数字(整数),每个数字范围是[10,50],统计每个数字出现的次数 * 以及出现次数最多的数字与它的个数,最后将每个数字及其出现次数打印出来, * 如果某个数字出现次数为0, ...

  5. 「暑期训练」「Brute Force」 Restoring Painting (CFR353D2B)

    题意 给定一定条件,问符合的矩阵有几种. 分析 见了鬼了,这破题谁加的brute force的标签,素质极差.因为范围是1e5,那你平方(枚举算法)的复杂度必然爆. 然后你就会思考其中奥妙无穷的数学规 ...

  6. Git创建project

    1.登录创建新仓库 命名 2.https://gitforwindows.org/  下载git的windows客户端,输入git查看是否成功 3.创建文件夹,写内容并查看,和linux指令一样 4. ...

  7. SQL 语句中 exists和not exists的用法

    exists       (sql       返回结果集,为真)   not       exists       (sql       不返回结果集,为真) 如下: 表A ID   NAME    ...

  8. (原创)最小生成树之Prim(普里姆)算法+代码详解,最懂你的讲解

    Prim算法 (哈欠)在创建最小生成树之前,让我们回忆一下什么是最小生成树.最小生成树即在一个待权值的图(即网结构)中用一个七拐八绕的折线串连起所有的点,最小嘛,顾名思义,要权值相加起来最小,你当然可 ...

  9. BZOJ 1565 NOI2009 植物大战僵尸 topo+最小割(最大权闭合子图)

    题目链接:https://www.luogu.org/problemnew/show/P2805(bzoj那个实在是有点小小的辣眼睛...我就把洛谷的丢出来吧...) 题意概述:给出一张有向图,这张有 ...

  10. java正则表达式 1 -- 符号

    正则表达式主要是用于操作字符串的规则 1 首先体验一下正则表达式: 需求:某个串只能是数字 传统方法: public class Demo2{ public static void main(Stri ...