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. Git的使用规范(一)

    1.建议使用 git add.2.不建议使用git commit -a3.撤销没有add的git checkout . 这个命令我们可以好好的介绍一下,如果当你对文件进行了修改,你没有进行git ad ...

  2. WPF中的ControlTemplate(控件模板)

    原文:WPF中的ControlTemplate(控件模板) WPF中的ControlTemplate(控件模板)                                             ...

  3. LeetCode:16. 3Sum Closest(Medium)

    1. 原题链接 https://leetcode.com/problems/3sum-closest/description/ 2. 题目要求 数组S = nums[n]包含n个整数,找出S中三个整数 ...

  4. Java测试工具和框架

    个人目前只接触过JUnit以及Powermock,后续会关注更多有关测试这方面的东西 8个超实用的Java测试工具和框架_开发/数据库_IT专家网 http://database.ctocio.com ...

  5. Git 使用 粗糙记录

    版本控制应该是每一个开发人员应该会的东西,奈何,学校没有学习,随着写代码的时间的加长,越来月觉得版本控制的必要性了. 记得在实习的公司,同一痛的都是SVN. 至于GIt和SVN的区别,直接看连接 ht ...

  6. Git的使用和部署

    Git是什么? Git是目前世界上最先进的分布式版本控制系统(没有之一). 什么是版本控制系统? 没有版本控制系统 有了版本控制系统 版本 文件名 用户 说明 日期 1 service.doc 张三 ...

  7. 平面最近点对(HDU 1007)

    题解:点击 #include <stdio.h> #include <string.h> #include <algorithm> #include <ios ...

  8. cygwin上编译RPC框架thrift

    cygwin的配置就不多说了,缺什么就通过安装器安装好了. 在thrift的官网下载 thrift-0.11.0源码,通过cmake编译,生成Makefile之后,make出现编译错误 /cygdri ...

  9. nginx开机自启动

    配置步骤:1 . vi /etc/init.d/nginx2. chkconfig --level nginx 2345 on --重点 --------------------以下为nginx配置文 ...

  10. php开发中处理emoji表情和颜文字的兼容问题

    背景:随着手机的普及,现在移动开发很火爆,已经远远超过了pc端.在移动设备经常会发生用户发送的内容中包含emoji表情,在显示时就是乱码.一般是因为Mysql表设计时,都是用UTF8字符集的.把带有e ...