java map转xml 工具类_xml和map互转工具类
/*** 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互转工具类相关推荐
- java gps时间转换工具_java 时间戳和时间互转工具 和 时间偏移量计算
时间互转代码片段: * 时间戳 转 时间 * * @param beginDate * @return * @see [类.类#方法.类#成员] */ public static String tim ...
- Java JSON、XML文件/字符串与Bean对象互转解析
前言 在做web或者其他项目中,JSON与XML格式的数据是大家经常会碰见的2种.在与各种平台做数据对接的时候,JSON与XML格式也是基本的数据传递格式,本文主要简单的介绍JSON/XML ...
- JavaXml教程(八)使用JDOM将Java对象转换为XML
在前面的教程中我们学习了如何使用JDOM解析和修改XML文件内容,本节介绍如何将Java对象转换为XML数据并生成文件. JDOM的Document类提供了便捷的方法创建元素和属性,XMLOutput ...
- java 写 xml 文件 工具类_XML读写工具类
摘要:①读取XML文件,生成pojo对象:②将对象信息保存到xml中. 步骤: ①新建一个普通的java类BasePage: packagecom.test.selenium.pages;import ...
- 小汤学编程之JAVA基础day11——集合框架:List/Set/Map集合、Collections集合工具类、泛型、TreeMap和TreeSet
一.集合的特点 二.继承结构图 三.List集合 1.特点 2.ArrayList类 3.LinkedList类 4.两者的对比 5.集合的遍历 四.Set集合 1.特 ...
- Java自学第6期——Collection、Map、迭代器、泛型、可变参数、集合工具类、集合数据结构、Debug
欢迎访问我的个人网站:https://bengtian.club 集合:集合是java中提供的一种容器,可以用来存储多个数据. 集合和数组既然都是容器,它们有啥区别呢? 数组的长度是固定的.集合的长度 ...
- java工具类-bean转map
工作常常遇到将java的Bean对象转化为Map,或者将Map转为Bean对象. 常见的手段 通过json工具,将Bean转json,再将json转Map 效率低 jdk的反射,获取类的属性,进行转化 ...
- java中map和对象互转工具类
在项目开发中,经常碰到map转实体对象或者对象转map的场景,工作中,很多时候我们可能比较喜欢使用第三方jar包的API对他们进行转化,而且用起来也还算方便,比如像fastJson就可以轻松实现map ...
- 总结的一些json格式和对象/String/Map/List等的互转工具类
总结的一些json格式和对象/String/Map/List等的互转工具类,有需要的可以看看,需要引入jackson-core-asl-1.7.1.jar.jackson-jaxrs-1.7.1.ja ...
最新文章
- linux命令行中curl和wget自动解压功能对比
- js checkbox复选框实现单选功能
- 小李飞刀:刷题第四弹!
- 敏捷开发用户故事系列之二:如何面向客户价值编写故事
- MySQL 是如何利用索引的
- ac自动机 匹配最长前缀_【HDU】5069 Harry And Biological Teacher AC自动机fail指针建树dfs...
- 2020邮储银行实习面试经验
- Magicodes.IE在.NET Core中通过请求头导出多种格式文件
- Office EXCEL 创建图片超链接打不开怎么办 Excel打开图片提示发生了意外错误怎么办
- diskpart给u盘分区
- Latex改变页边距
- 3P(PS、PR、PDF编辑器Acrobat)中的基基本操作(一)
- android 十字架效果实现(水平和垂直滑动)
- 【	newcoder 】幼儿园战争 【并查集+删并查】
- 网络安全学习第15篇 - 游戏内存修改
- Java-常用API、Lambda、常见算法
- mysql5.7第一次登录修改root密码
- 自定义函数fac1用递推方法求n!,自定义函数fac2用递归方法求n!,主函数中输入整数n(0≦n≦10)后,分别调用函数fac1和函数fac2求n!,最后输出调用的结果值进行对比。
- 探索java的 protect/private变量
- openCV中直方图均衡化算法的理解
热门文章
- 阿里工程师教你 3 分钟实现数据源编排和接入
- 还在用print()查找错误?日志消息不香嘛? | 原力计划
- 程序员分析一线城市 1000 +岗位招聘需求,告诉你如何科学找工作
- 华为面向全球发布HMS Core 4.0意味着什么?
- 支付宝、微信回应3D面具破解人脸识别;ofo 否认「发币」;Kafka 2.4.0 发布 | 极客头条...
- 2019年,有远见的程序员都在关注这些硬核公众号
- Google、Facebook等不可错过的 AI 开源工具,你想要的都在这里!
- 牛!GitHub标星Python项目实战,附赠:学习图谱
- AI 垃圾分类指日可待?
- 东哥再见!我打算 6 月份离职