/*** xml转map工具类

*@authorzhangyao

**/

public classXmlToMapUtil {/*** xml转map 不带属性

*@paramxmlStr

*@paramneedRootKey 是否需要在返回的map里加根节点键

*@return*@throwsDocumentException*/

public static Map xml2map(String xmlStr, boolean needRootKey) throwsDocumentException {

Document doc=DocumentHelper.parseText(xmlStr);

Element root=doc.getRootElement();

Map map = (Map) xml2map(root);if(root.elements().size()==0 && root.attributes().size()==0){returnmap;

}if(needRootKey){//在返回的map里加根节点键(如果需要)

Map rootMap = new HashMap();

rootMap.put(root.getName(), map);returnrootMap;

}returnmap;

}/*** xml转map 带属性

*@paramxmlStr

*@paramneedRootKey 是否需要在返回的map里加根节点键

*@return*@throwsDocumentException*/

public static Map xml2mapWithAttr(String xmlStr, boolean needRootKey) throwsDocumentException {

Document doc=DocumentHelper.parseText(xmlStr);

Element root=doc.getRootElement();

Map map = (Map) xml2mapWithAttr(root);if(root.elements().size()==0 && root.attributes().size()==0){return map; //根节点只有一个文本内容

}if(needRootKey){//在返回的map里加根节点键(如果需要)

Map rootMap = new HashMap();

rootMap.put(root.getName(), map);returnrootMap;

}returnmap;

}/*** xml转map 不带属性

*@parame

*@return

*/

private staticMap xml2map(Element e) {

Map map= newLinkedHashMap();

List list=e.elements();if (list.size() > 0) {for (int i = 0; i < list.size(); i++) {

Element iter=(Element) list.get(i);

List mapList= newArrayList();if (iter.elements().size() > 0) {

Map m=xml2map(iter);if (map.get(iter.getName()) != null) {

Object obj=map.get(iter.getName());if (!(obj instanceofList)) {

mapList= newArrayList();

mapList.add(obj);

mapList.add(m);

}if (obj instanceofList) {

mapList=(List) obj;

mapList.add(m);

}

map.put(iter.getName(), mapList);

}elsemap.put(iter.getName(), m);

}else{if (map.get(iter.getName()) != null) {

Object obj=map.get(iter.getName());if (!(obj instanceofList)) {

mapList= newArrayList();

mapList.add(obj);

mapList.add(iter.getText());

}if (obj instanceofList) {

mapList=(List) obj;

mapList.add(iter.getText());

}

map.put(iter.getName(), mapList);

}elsemap.put(iter.getName(), iter.getText());

}

}

}elsemap.put(e.getName(), e.getText());returnmap;

}/*** xml转map 带属性

*@parame

*@return

*/

private staticMap xml2mapWithAttr(Element element) {

Map map = new LinkedHashMap();

List list =element.elements();

List listAttr0 = element.attributes(); //当前节点的所有属性的list

for(Attribute attr : listAttr0) {

map.put("@" +attr.getName(), attr.getValue());

}if (list.size() > 0) {for (int i = 0; i < list.size(); i++) {

Element iter=list.get(i);

List mapList= newArrayList();if (iter.elements().size() > 0) {

Map m=xml2mapWithAttr(iter);if (map.get(iter.getName()) != null) {

Object obj=map.get(iter.getName());if (!(obj instanceofList)) {

mapList= newArrayList();

mapList.add(obj);

mapList.add(m);

}if (obj instanceofList) {

mapList=(List) obj;

mapList.add(m);

}

map.put(iter.getName(), mapList);

}elsemap.put(iter.getName(), m);

}else{

List listAttr = iter.attributes(); //当前节点的所有属性的list

Map attrMap = null;boolean hasAttributes = false;if (listAttr.size() > 0) {

hasAttributes= true;

attrMap= new LinkedHashMap();for(Attribute attr : listAttr) {

attrMap.put("@" +attr.getName(), attr.getValue());

}

}if (map.get(iter.getName()) != null) {

Object obj=map.get(iter.getName());if (!(obj instanceofList)) {

mapList= newArrayList();

mapList.add(obj);//mapList.add(iter.getText());

if(hasAttributes) {

attrMap.put("#text", iter.getText());

mapList.add(attrMap);

}else{

mapList.add(iter.getText());

}

}if (obj instanceofList) {

mapList=(List) obj;//mapList.add(iter.getText());

if(hasAttributes) {

attrMap.put("#text", iter.getText());

mapList.add(attrMap);

}else{

mapList.add(iter.getText());

}

}

map.put(iter.getName(), mapList);

}else{//map.put(iter.getName(), iter.getText());

if(hasAttributes) {

attrMap.put("#text", iter.getText());

map.put(iter.getName(), attrMap);

}else{

map.put(iter.getName(), iter.getText());

}

}

}

}

}else{//根节点的

if (listAttr0.size() > 0) {

map.put("#text", element.getText());

}else{

map.put(element.getName(), element.getText());

}

}returnmap;

}/*** map转xml map中没有根节点的键

*@parammap

*@paramrootName

*@throwsDocumentException

*@throwsIOException*/

public static Document map2xml(Map map, String rootName) throwsDocumentException, IOException {

Document doc=DocumentHelper.createDocument();

Element root=DocumentHelper.createElement(rootName);

doc.add(root);

map2xml(map, root);//System.out.println(doc.asXML());//System.out.println(formatXml(doc));

returndoc;

}/*** map转xml map中含有根节点的键

*@parammap

*@throwsDocumentException

*@throwsIOException*/

public static Document map2xml(Map map) throwsDocumentException, IOException {

Iterator> entries =map.entrySet().iterator();if(entries.hasNext()){ //获取第一个键创建根节点

Map.Entry entry =entries.next();

Document doc=DocumentHelper.createDocument();

Element root=DocumentHelper.createElement(entry.getKey());

doc.add(root);

map2xml((Map)entry.getValue(), root);//System.out.println(doc.asXML());//System.out.println(formatXml(doc));

returndoc;

}return null;

}/*** map转xml

*@parammap

*@parambody xml元素

*@return

*/

private static Element map2xml(Mapmap, Element body) {

Iterator> entries =map.entrySet().iterator();while(entries.hasNext()) {

Map.Entry entry =entries.next();

String key=entry.getKey();

Object value=entry.getValue();if(key.startsWith("@")){ //属性

body.addAttribute(key.substring(1, key.length()), value.toString());

}else if(key.equals("#text")){ //有属性时的文本

body.setText(value.toString());

}else{if(value instanceofjava.util.List ){

List list=(List)value;

Object obj;for(int i=0; i

obj=list.get(i);//list里是map或String,不会存在list里直接是list的,

if(obj instanceofjava.util.Map){

Element subElement=body.addElement(key);

map2xml((Map)list.get(i), subElement);

}else{

body.addElement(key).setText((String)list.get(i));

}

}

}else if(value instanceofjava.util.Map ){

Element subElement=body.addElement(key);

map2xml((Map)value, subElement);

}else{

body.addElement(key).setText(value.toString());

}

}//System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue());

}returnbody;

}/*** 格式化输出xml

*@paramdocument2

*@return*@throwsDocumentException

*@throwsIOException*/

public static String formatXml(String xmlStr) throwsException {

org.dom4j.Document document=DocumentHelper.parseText(xmlStr);returnformatXml1(document);

}/*** 格式化输出xml

*@paramdocument

*@return*@throwsDocumentException

*@throwsIOException*/

public static String formatXml1(Document document) throwsException {//格式化输出格式

OutputFormat format =OutputFormat.createPrettyPrint();//format.setEncoding("UTF-8");

StringWriter writer = newStringWriter();//格式化输出流

XMLWriter xmlWriter = newXMLWriter(writer, format);//将document写入到输出流

xmlWriter.write(document);

xmlWriter.close();returnwriter.toString();

}

}

java map转xml 工具类_xml和map互转工具类相关推荐

  1. java gps时间转换工具_java 时间戳和时间互转工具 和 时间偏移量计算

    时间互转代码片段: * 时间戳 转 时间 * * @param beginDate * @return * @see [类.类#方法.类#成员] */ public static String tim ...

  2. Java JSON、XML文件/字符串与Bean对象互转解析

    前言      在做web或者其他项目中,JSON与XML格式的数据是大家经常会碰见的2种.在与各种平台做数据对接的时候,JSON与XML格式也是基本的数据传递格式,本文主要简单的介绍JSON/XML ...

  3. JavaXml教程(八)使用JDOM将Java对象转换为XML

    在前面的教程中我们学习了如何使用JDOM解析和修改XML文件内容,本节介绍如何将Java对象转换为XML数据并生成文件. JDOM的Document类提供了便捷的方法创建元素和属性,XMLOutput ...

  4. java 写 xml 文件 工具类_XML读写工具类

    摘要:①读取XML文件,生成pojo对象:②将对象信息保存到xml中. 步骤: ①新建一个普通的java类BasePage: packagecom.test.selenium.pages;import ...

  5. 小汤学编程之JAVA基础day11——集合框架:List/Set/Map集合、Collections集合工具类、泛型、TreeMap和TreeSet

    一.集合的特点 二.继承结构图 三.List集合 1.特点     2.ArrayList类     3.LinkedList类     4.两者的对比     5.集合的遍历 四.Set集合 1.特 ...

  6. Java自学第6期——Collection、Map、迭代器、泛型、可变参数、集合工具类、集合数据结构、Debug

    欢迎访问我的个人网站:https://bengtian.club 集合:集合是java中提供的一种容器,可以用来存储多个数据. 集合和数组既然都是容器,它们有啥区别呢? 数组的长度是固定的.集合的长度 ...

  7. java工具类-bean转map

    工作常常遇到将java的Bean对象转化为Map,或者将Map转为Bean对象. 常见的手段 通过json工具,将Bean转json,再将json转Map 效率低 jdk的反射,获取类的属性,进行转化 ...

  8. java中map和对象互转工具类

    在项目开发中,经常碰到map转实体对象或者对象转map的场景,工作中,很多时候我们可能比较喜欢使用第三方jar包的API对他们进行转化,而且用起来也还算方便,比如像fastJson就可以轻松实现map ...

  9. 总结的一些json格式和对象/String/Map/List等的互转工具类

    总结的一些json格式和对象/String/Map/List等的互转工具类,有需要的可以看看,需要引入jackson-core-asl-1.7.1.jar.jackson-jaxrs-1.7.1.ja ...

最新文章

  1. linux命令行中curl和wget自动解压功能对比
  2. js checkbox复选框实现单选功能
  3. 小李飞刀:刷题第四弹!
  4. 敏捷开发用户故事系列之二:如何面向客户价值编写故事
  5. MySQL 是如何利用索引的
  6. ac自动机 匹配最长前缀_【HDU】5069 Harry And Biological Teacher AC自动机fail指针建树dfs...
  7. 2020邮储银行实习面试经验
  8. Magicodes.IE在.NET Core中通过请求头导出多种格式文件
  9. Office EXCEL 创建图片超链接打不开怎么办 Excel打开图片提示发生了意外错误怎么办
  10. diskpart给u盘分区
  11. Latex改变页边距
  12. 3P(PS、PR、PDF编辑器Acrobat)中的基基本操作(一)
  13. android 十字架效果实现(水平和垂直滑动)
  14. 【 newcoder 】幼儿园战争 【并查集+删并查】
  15. 网络安全学习第15篇 - 游戏内存修改
  16. Java-常用API、Lambda、常见算法
  17. mysql5.7第一次登录修改root密码
  18. 自定义函数fac1用递推方法求n!,自定义函数fac2用递归方法求n!,主函数中输入整数n(0≦n≦10)后,分别调用函数fac1和函数fac2求n!,最后输出调用的结果值进行对比。
  19. 探索java的 protect/private变量
  20. openCV中直方图均衡化算法的理解

热门文章

  1. 阿里工程师教你 3 分钟实现数据源编排和接入
  2. 还在用print()查找错误?日志消息不香嘛? | 原力计划
  3. 程序员分析一线城市 1000 +岗位招聘需求,告诉你如何科学找工作
  4. 华为面向全球发布HMS Core 4.0意味着什么?
  5. 支付宝、微信回应3D面具破解人脸识别;ofo 否认「发币」;Kafka 2.4.0 发布 | 极客头条...
  6. 2019年,有远见的程序员都在关注这些硬核公众号
  7. Google、Facebook等不可错过的 AI 开源工具,你想要的都在这里!
  8. 牛!GitHub标星Python项目实战,附赠:学习图谱
  9. AI 垃圾分类指日可待?
  10. 东哥再见!我打算 6 月份离职