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. python,函数式编程

    函数式编程: 特点:允许传递的参数是函数,且允许返回一个函数. 由于Python允许使用变量,因此,Python不是纯函数式编程语言,同样的输入可能输出不同,有副作用.纯函数式编程语言没有变量,输入和 ...

  2. Java8新特性(三)——Optional类、接口方法与新时间日期API

    一.Optional容器类 这是一个可以为null的容器对象.如果值存在则isPresent()方法会返回true,调用get()方法会返回该对象. 查看结构图可以看到有如下常用方法: of(T)—— ...

  3. xss挑战赛小记 0x01(xsstest)

    0x00 今天在先知社区看到了一个xss挑战赛 结果发现比赛已经结束 服务器也关了 百度找了个xss挑战赛来玩一下 正好印证下xss的学习--- 地址     http://test.xss.tv/ ...

  4. Java线程和多线程(十)——TimerTask

    Java中的java.util.Timer是一个工具类,可以用于调度一个线程在将来的某一个时刻执行特定的任务.Java Timer类可以将一个任务定时执行一次,或者是以后以每隔一定的时间间隔来触发一次 ...

  5. linux-clone-ip处理办法

    vim /etc/udev/rules.d/70-persistent-net.rules 步骤1:#将eth0相关的文件给删除 步骤2:#vi /etc/sysconfig/network-scri ...

  6. Android PopupWindow 疑难杂症之宽度WRAP_CONTENT

    一直以来都觉得 Android 中的 PopupWindow 不好用.主要有以下两点:1.宽度不好控制2.位置不好控制 今天单说第1点. 由于应用有好几种国家的语言,加上各设备宣染效果不完全一样,对p ...

  7. C#3DES加密了解一下

    最近一个项目中,因为服务端是用的java开发的,客户端是用的C#,由于通信部分采用到了3DES加密,所以做个记录,以备以后需要的时候直接用. 这是对方(java)的加密算法,和网上流传的代码也差不多( ...

  8. oracle 数据库字段名与实体类字段名称不匹配的处理方法

    之前公司一直都使用sql server 即使数据库字段名称与实体类名称不相同 可以使用诸如: select id as userId from tb_user 这种写法,可换到了oracle 之后坑爹 ...

  9. 在线算法&离线算法

    [在线算法] 定义:指用户每输入一个查询便马上处理一个查询.该算法一般用较长的时间做预处理,待信息充足以后便可以用较少的时间回答每个查询. 常见在线算法:ST算法 [离线算法] 定义:

  10. Manacher算法——最长回文子串

    一.相关介绍 最长回文子串 s="abcd", 最长回文长度为 1,即a或b或c或d s="ababa", 最长回文长度为 5,即ababa s="a ...