依赖

<!-- https://mvnrepository.com/artifact/dom4j/dom4j --><dependency><groupId>dom4j</groupId><artifactId>dom4j</artifactId><version>1.6.1</version></dependency><dependency><groupId>jaxen</groupId><artifactId>jaxen</artifactId><version>1.1.6</version></dependency>
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;import java.io.StringReader;
import java.io.StringWriter;
import java.util.*;public class MapToXml {public static String formatXML(String xml) {String requestXML = null;try {// 拿取解析器SAXReader reader = new SAXReader();Document document = reader.read(new StringReader(xml));if (null != document) {StringWriter stringWriter = new StringWriter();// 格式化,每一级前的空格OutputFormat format = new OutputFormat("    ", true);// xml声明与内容是否添加空行format.setNewLineAfterDeclaration(false);// 是否设置xml声明头部format.setSuppressDeclaration(false);// 是否分行format.setNewlines(true);XMLWriter writer = new XMLWriter(stringWriter, format);writer.write(document);writer.flush();writer.close();requestXML = stringWriter.getBuffer().toString();}return requestXML;} catch (Exception e) {System.out.println("格式化xml,失败 --> {}"+e);return null;}}public static String  parseMap(Map<?, ?> map, StringBuffer sb) {Set<?> set = map.keySet();for (Iterator<?> it = set.iterator(); it.hasNext();) {String key = (String) it.next();Object value = map.get(key);if (value instanceof HashMap) {sb.append("<" + key + ">");parseMap((HashMap<?, ?>) value, sb);sb.append("</" + key + ">");} else if (value instanceof ArrayList) {List<?> list = (ArrayList<?>) map.get(key);for (int i = 0; i < list.size(); i++) {sb.append("<" + key + ">");Map<?, ?> hm = (HashMap<?, ?>) list.get(i);parseMap(hm, sb);sb.append("</" + key + ">");}} else {sb.append("<" + key + ">" + value + "</" + key + ">");}}return sb.toString();}/*** w3c Element 转成xml串* @param element* @return* @throws Exception*/public static String w3cElementTransferXmlStr(org.w3c.dom.Element element) throws Exception{TransformerFactory tFactory = TransformerFactory.newInstance();Transformer transformer = tFactory.newTransformer();Source source = new DOMSource(element);StringWriter out = new StringWriter();Result output = new StreamResult(out);transformer.transform(source, output);out.flush();String ss = out.toString();return formatXML(ss);}/***  xml串 转成w3c Element* @param xmlString* @return* @throws Exception*/public static org.w3c.dom.Element getElementByString(String xmlString) throws Exception {if (xmlString == null){xmlString = "<returnInfo><returnCode>-999</returnCode><description>error</description></returnInfo>";}org.w3c.dom.Document doc = null;Reader strreader = new StringReader(xmlString);DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();doc = builder.parse(new InputSource(strreader));return doc.getDocumentElement();}}
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;public class XmlToMap {public static void main(String[] args) {String xml = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n" +"\n" +"<Data>\n" +"  <Data_Row>\n" +"    <Lis_Barcode>0000000099</Lis_Barcode>\n" +"    <pat_id>42</pat_id>\n" +"    <pat_no>0000000099</pat_no>\n" +"    <blood_time/>\n" +"    <pat_name>张三丰</pat_name>\n" +"    <pat_bedno/>\n" +"    <pat_sex>男</pat_sex>\n" +"    <pat_birthday>1994-01-24 00:00:00.0</pat_birthday>\n" +"    <pat_age>0</pat_age>\n" +"    <pat_ageunit>4</pat_ageunit>\n" +"    <dept_name>信息科</dept_name>\n" +"    <doctor_name>zyf</doctor_name>\n" +"    <clinical_diag/>\n" +"    <samp_name>全血</samp_name>\n" +"    <LisItems>\n" +"      <lis_item_code>403</lis_item_code>\n" +"      <lis_item_name>白细胞</lis_item_name>\n" +"      <SubItems>\n" +"        <lis_subitem_code>350</lis_subitem_code>\n" +"        <lis_subitem_name>WBC</lis_subitem_name>\n" +"      </SubItems>\n" +"    </LisItems>\n" +"    <LisItems>\n" +"      <lis_item_code>961</lis_item_code>\n" +"      <lis_item_name>乙肝三系定量(5项)</lis_item_name>\n" +"      <SubItems>\n" +"        <lis_subitem_code>316</lis_subitem_code>\n" +"        <lis_subitem_name>HBsAg(定量)</lis_subitem_name>\n" +"      </SubItems>\n" +"      <SubItems>\n" +"        <lis_subitem_code>1115</lis_subitem_code>\n" +"        <lis_subitem_name>HBeAg(定量)</lis_subitem_name>\n" +"      </SubItems>\n" +"      <SubItems>\n" +"        <lis_subitem_code>547</lis_subitem_code>\n" +"        <lis_subitem_name>HBsAb(定量)</lis_subitem_name>\n" +"      </SubItems>\n" +"      <SubItems>\n" +"        <lis_subitem_code>796</lis_subitem_code>\n" +"        <lis_subitem_name>HBeAb(定量)</lis_subitem_name>\n" +"      </SubItems>\n" +"      <SubItems>\n" +"        <lis_subitem_code>233</lis_subitem_code>\n" +"        <lis_subitem_name>HBcAb(定量)</lis_subitem_name>\n" +"      </SubItems>\n" +"    </LisItems>\n" +"  </Data_Row>\n" +"</Data>\n";try {//xml转mapMap map = parseXml(xml);System.out.println("+++++++++++++++++");//map转xmlStringBuffer sb = new StringBuffer();MapToXml.parseMap(map,sb);System.out.println(MapToXml.formatXML(sb.toString()));} catch (DocumentException e) {e.printStackTrace();}}/*** xml转为map,map中有list(节点相同时候),list中有map* @param xml* @return* @throws DocumentException*/public static Map<String, Object> parseXml(String xml) throws DocumentException {Map map = new HashMap();try {SAXReader saxReader = new SAXReader();Document document = saxReader.read(new ByteArrayInputStream(xml.getBytes("UTF-8")));//xml串第一行不能有空格,否则报错Element root = document.getRootElement();//得到xml文档根节点元素,即最上层的"<xml>"elementTomap(root, map);} catch (UnsupportedEncodingException e) {e.printStackTrace();}return map;}@SuppressWarnings("unchecked")public static Map<String, Object> elementTomap(Element outele, Map<String, Object> outmap) {List<Element> list = outele.elements();int size = list.size();if (size == 0) {outmap.put(outele.getName(), outele.getTextTrim());} else {Map<String, Object> innermap = new HashMap<String, Object>();int i = 1;for (Element ele1 : list) {String eleName = ele1.getName();String value = ele1.getText();Object obj = innermap.get(eleName);if (obj == null) {elementTomap(ele1, innermap);} else {if (obj instanceof java.util.Map) {List<Map<String, Object>> list1 = new ArrayList<Map<String, Object>>();list1.add((Map<String, Object>) innermap.remove(eleName));elementTomap(ele1, innermap);list1.add((Map<String, Object>) innermap.remove(eleName));innermap.put(eleName, list1);} else if (obj instanceof String) {innermap.put(eleName + i, value);i++;} else {elementTomap(ele1, innermap);Map<String, Object> listValue = (Map<String, Object>) innermap.get(eleName);((List<Map<String, Object>>) obj).add(listValue);innermap.put(eleName, obj);}}}outmap.put(outele.getName(), innermap);}return outmap;}
}

获取节点的例子
xml串:

<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelopexmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" soap:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"><soap:Header><in:systemxmlns:in="http://www.molss.gov.cn/"><para funid="F01.01.01.02"/></in:system></soap:Header><soap:Body><in:businessxmlns:in="http://www.molss.gov.cn/"><para channelid="fjfz0002"/><para channelsign="031bfee38b647a041893a8ade78d8d2c34422"/><para AAZ107="12316"/><para AAZ501="A39714791"/><para aae140="310"/><para code="1"/><para AKC021="2"/><para AKA122="000002000001"/><para AKE098="0"/><para APA151="0"/><para BPA150="1"/><para BPA155=""/><paralist name="noticelist"><row  AKE001="11401007206041510501" AKE006="汞溴红溶液"  AKA074="20ml" AKC229="1" /><row  AKE001="11401007206041510502" AKE006="波立维颗粒"  AKA074="1g" AKC229="1" /></paralist><paralist name="mxlist"><row AKE001="11401007206041510501"  AKE006="汞溴红溶液" AKC194="20190325 " AKE130="瓶"  AKC226="1" AKC225="2" AKB065="2" AKA074="20ml" AKA072="1" AKA071="1ml" AKC229="3" AAC003="张明" AKB021="上海街道社区医院" AKA122="" AAE376="内科" /></paralist></in:business></soap:Body>
</soap:Envelope>
SAXReader saxReader = new SAXReader();
Document doc = saxReader.read(new ByteArrayInputStream(xml.getBytes("UTF-8")));//xml串第一行不能有空格,否则报错
List<Node> paraNodes = (List) doc.selectNodes("//para");//获取para节点for(Node e:paraNodes){List list = ((Element)e).attributes();//节点中的属性集合for (int i = 0; i < list.size(); i++){DefaultAttribute attribute = (DefaultAttribute)list.get(i);map.put(attribute.getName(), attribute.getValue());//属性名及属性值}}// 举例:获取<paralist name="noticelist">下的row节点List<Node> rowNodes = doc.selectNodes( "//paralist[@name='noticelist']//row" );

xml和map相互转化相关推荐

  1. java解析xml转为Map

    之前开发过一个解析多层级xml文件的工具类,后来处理的时候发现,这种方式得到的map或json集合多一个key标签,在解析的时候会比较麻烦,于是根据需要在原有方法的基础上写出了另外的处理方法,总结记录 ...

  2. java xml map 方法_JAVA XML转换MAP 方法

    在开发过程中会调用soap接口,返回的数据就是xml形式,那么久需要对xml进行解析,对xml操作大家都还是比较不是很熟悉相比对于map的操作.所以我提供了这么一个方法,让大家对xml数据提取,转换成 ...

  3. Java工具类——通过配置XML验证Map

    Java工具类--通过配置XML验证Map 背景 在JavaWeb项目中,接收前端过来的参数时通常是使用我们的实体类进行接收的.但是呢,我们不能去决定已经搭建好的框架是怎么样的,在我接触的框架中有一种 ...

  4. Java实现xml与map互转

    此文档中包含单层和多层嵌套情况下,xml和map集合进行互转,具体代码如下: import java.util.HashMap; import java.util.List; import java. ...

  5. 微信支付中xml和map互转

    现在用java做微信公众号的支付,支付过程将参数发给微信是以xml格式发送,接受过来的也是xml格式字符串.感觉网上的xml和map转化复杂就手写了一个,具体代码如下: package com.cij ...

  6. xml与map的相互转换

    简单结构的xml转换 import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.Element; ...

  7. java递归多层(多节点)xml和map互相转换

    具体见代码 调用方法: 第一种map转xml:createXmlByMap(Map<String, Object> map,String parentName); 第二种map转xml:m ...

  8. 解析xml报文,xml与map互转

    这段时间写了一个关于xml报文的工具类,做一下具体的讲解: xml文本 <NTMMessage version="1.03"> <NTMHeader>< ...

  9. xml 转map dom4j

    http://ziyu-1.iteye.com/blog/469003 传过来一个xml文件,需要转换成Map,能够应对不用结构的xml,而不是只针对固定格式的xml.  转换规则:  1.主要是Ma ...

最新文章

  1. spacy spaCy主要功能包括分词、词性标注、词干化、命名实体识别、名词短语提取等等
  2. SQL 根据身份证号码获取年龄的函数
  3. u盘读写测试_如何提高u盘读写速度 提高u盘读写速度方法【详细步骤】
  4. 多元统计分析最短距离法_多元统计分析重点
  5. 使用 Docker 打造超溜的前端环境
  6. Java中构造函数,静态代码块,构造代码块的执行顺序
  7. CentOS 7.5 重置 root 密码
  8. 华悦网游器软件介绍及功能介绍
  9. 基于云计算的毕业设计题目
  10. [actions] -- actions详细使用
  11. python远程监控服务器多个日志_flume远程监控一个文件
  12. ICLR 2022 | 颠覆传统!大规模图像检索系统首次引入「热刷新」模型升级!腾讯清华大学新作...
  13. Apache Drill详解
  14. 基于皮肤分割的磨皮算法
  15. 【leetcode】剑指 Offer 29. 顺时针打印矩阵(shun-shi-zhen-da-yin-ju-zhen-lcof)(模拟)[简单]
  16. 水表自动抄表系统有什么功能
  17. 如何分享CSDN的博客
  18. 实验六:视图及数据库系统安全
  19. html表格高度自动调整,table表格自适应高度的办法
  20. 创建 JCEKS 密钥库

热门文章

  1. 华硕电脑 计算机管理员,华硕笔记本BIOS怎么用管理员密码清除用户密码...-卓优商学问答...
  2. 树莓派:64位 RPI OS(Bullseye) 更换国内源
  3. 设定是否使用IOB中的寄存器
  4. rnn 循环神经网络
  5. 【MySQL】navicat for mysql 安装及使用
  6. tomcat日志格式转化为json
  7. memcached启动脚本
  8. python如何读取uni文件_如何在Python中通过HTTP与UniProt交谈?
  9. REMOTE HOST IDENTIFICATION HAS CHANGED问题解决
  10. 爬虫结合批量下载评书、有声书、戏曲等的使用教程