帮助小伙伴写的组装xml字符串类
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字符串类的更多相关文章
- 任务备忘(已经完成):用python写一个格式化xml字符串的程序
功能: 1.将xml中多余的空格,换行符去掉,让xml字符串变成一行. 2.将xml中添加缩进,使用print能正确打印添加缩进后的字符串. 思路: 采用正则表达式来判断xml中字符串的类型: 1.文 ...
- XML Helper XML操作类
写的一个XML操作类,包括读取/插入/修改/删除. using System;using System.Data;using System.Configuration;using System.Web ...
- C#:XML操作类
写的一个XML操作类,包括读取/插入/修改/删除. using System; using System.Data; using System.Configuration; using System. ...
- C#操作xml完整类文件
C#操作xml完整类文件 xml_oper.cs using ...System; using System.Data; using System.Web; using System.Xml; /** ...
- .NET解析xml字符串,通过反射给实体类对象赋值,获取实体类数据列表
/// <summary> /// 解析xml字符串 转换为实体类列表数据 /// </summary> /// <param name="xmlStr&quo ...
- 为什么不用C++写游戏(聪明的程序员不用C++折磨自己)(这些工作,QT都替开发者解决了,C++没有根类导致太多的问题,也没有字符串类)
当今世界上绝大多数游戏都是C++写的,为什么要说不呢? 要做什么?写游戏. 写游戏首先要考虑些什么?做什么样的游戏,图形.音效.游戏逻辑如何实现. 用C++要先考虑什么?定义跨平台数据类型抽象,实现常 ...
- dom4j组装xml 以及解析xml
dom4j组装xml 以及解析xml: 1.下载dom4j的jar包,地址:https://dom4j.github.io/ 2.java代码: package test; import java.i ...
- Core Java 总结(字符和字符串类问题)
所有代码均在本地编译运行测试,环境为 Windows7 32位机器 + eclipse Mars.2 Release (4.5.2) 2016-10-17 整理 字符,字符串类问题 正则表达式问题 J ...
- 将Xml字符串转换成(DataTable || DataSet || XML)对象
今天用到一个功能:就是把从数据库读出来的内容转换成XML字符串流格式,并输出给一个功能函数.在写的过程,为方便以后的使用,我对这一功能进行分装.该类的具体格式如下:XmlConvert类命名空间:Ni ...
随机推荐
- WPF把CheckBox的文字放到左边,开关在右边
原文:WPF把CheckBox的文字放到左边,开关在右边 效果 实现 这篇文章给了一个不错的参考方案. http://www.codeproject.com/Articles/19141/WPF-Ch ...
- 机器学习之-sklearn
https://www.cnblogs.com/lianyingteng/p/7811126.html sklearn官方文档: http://scikit-learn.org/stable/
- cf987f AND Graph
#include <iostream> #include <cstdio> using namespace std; int n, uu, m; bool a[4500005] ...
- nginx location优先级
目录 1. 配置语法 2. 配置实例 3. 总结: 网上查了下location的优先级规则,但是很多资料都说的模棱两可,自己动手实地配置了下,下面总结如下. 1. 配置语法 1> 精确匹配 lo ...
- 使用LinqToExcel和EPPlus操作excel
1.使用LinqToExcel LinqToExcel是一个.net framework平台下开源项目,它主要实现了LINQ的语法查询Excel电子表格.类型之前的LINQToXXX如果你是LINQ语 ...
- 「日常训练」Greedy Arkady (CFR476D2C)
不用问为啥完全一致,那个CSDN的也是我的,我搬过来了而已. 题意(Codeforces 965C) $k$人分$n$个糖果,每个糖果至多属于1个人.A某人是第一个拿糖果的.(这点很重要!!) 他$x ...
- virsh查看迁移信息的两个命令
virsh qemu-monitor-command uuid --hmp info migrate, 能看到迁移所设置的相关参数,和进度相关信息: virsh domjobinfo uuid命令, ...
- 机器学习/逻辑回归(logistic regression)/--附python代码
个人分类: 机器学习 本文为吴恩达<机器学习>课程的读书笔记,并用python实现. 前一篇讲了线性回归,这一篇讲逻辑回归,有了上一篇的基础,这一篇的内容会显得比较简单. 逻辑回归(log ...
- 深度可分卷积(Depthwise Separable Conv.)计算量分析
上次读到深度可分卷积还是去年暑假,各种细节都有些忘了.记录一下,特别是计算量的分析过程. 1. 标准卷积和深度可分卷积 标准卷积(MobileNet论文中称为Standard Convolution, ...
- lintcode-49-字符大小写排序
49-字符大小写排序 给定一个只包含字母的字符串,按照先小写字母后大写字母的顺序进行排序. 注意事项 小写字母或者大写字母他们之间不一定要保持在原始字符串中的相对位置. 样例 给出"abAc ...