java xml转map map转xml 带属性(这个效率更好)
http://happyqing.iteye.com/blog/2316275
参考效果:xml转json
java xml转json json转xml
http://happyqing.iteye.com/blog/2316142
java xml转map
package xml2map; import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Set; import net.sf.json.JSON; import net.sf.json.JSONObject; import org.apache.commons.io.FileUtils; import org.dom4j.Attribute; import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.DocumentHelper; import org.dom4j.Element; import org.dom4j.Namespace; import org.dom4j.QName; /** * xml转map,带属性 http://happyqing.iteye.com/blog/2317570 * * @author happyqing * @since 2016.8.8 */ @SuppressWarnings({ "rawtypes", "unchecked" }) public class XmlUtil2 { public static void main(String[] args) throws DocumentException, IOException { String textFromFile = FileUtils.readFileToString(new File("D:/workspace/workspace_3.7/xml2map/src/xml2json/sample.xml"),"UTF-8"); //Document doc = DocumentHelper.parseText(textFromFile); //Map<String, Object> map = (Map<String, Object>) xmlToMapWithAttr(doc.getRootElement()); Map<String, Object> map = xmlToMap(textFromFile, false); // long begin = System.currentTimeMillis(); // for(int i=0; i<1000; i++){ // map = (Map<String, Object>) xml2mapWithAttr(doc.getRootElement()); // } // System.out.println("耗时:"+(System.currentTimeMillis()-begin)); JSON json = JSONObject.fromObject(map); System.out.println(json.toString(1)); // 格式化输出 } /** * xml转map 不带属性 * @param xmlStr * @param needRootKey 是否需要在返回的map里加根节点键 * @return * @throws DocumentException */ public static Map xmlToMap(String xmlStr, boolean needRootKey) throws DocumentException { Document doc = DocumentHelper.parseText(xmlStr); Element root = doc.getRootElement(); Map<String, Object> map = (Map<String, Object>) xmlToMap(root); if(root.elements().size()==0 && root.attributes().size()==0){ return map; } if(needRootKey){ //在返回的map里加根节点键(如果需要) Map<String, Object> rootMap = new HashMap<String, Object>(); rootMap.put(root.getName(), map); return rootMap; } return map; } /** * xml转map 带属性 * @param xmlStr * @param needRootKey 是否需要在返回的map里加根节点键 * @return * @throws DocumentException */ public static Map xmlToMapWithAttr(String xmlStr, boolean needRootKey) throws DocumentException { Document doc = DocumentHelper.parseText(xmlStr); Element root = doc.getRootElement(); Map<String, Object> map = (Map<String, Object>) xmlToMapWithAttr(root); if(root.elements().size()==0 && root.attributes().size()==0){ return map; //根节点只有一个文本内容 } if(needRootKey){ //在返回的map里加根节点键(如果需要) Map<String, Object> rootMap = new HashMap<String, Object>(); rootMap.put(root.getName(), map); return rootMap; } return map; } /** * xml转map 不带属性 * @param element * @return */ private static Object xmlToMap(Element element) { // System.out.println(element.getName()); Map<String, Object> map = new LinkedHashMap<String, Object>(); List<Element> elements = element.elements(); if (elements.size() == 0) { map.put(element.getName(), element.getText()); if (!element.isRootElement()) { return element.getText(); } } else if (elements.size() == 1) { map.put(elements.get(0).getName(), xmlToMap(elements.get(0))); } else if (elements.size() > 1) { // 多个子节点的话就得考虑list的情况了,比如多个子节点有节点名称相同的 // 构造一个map用来去重 Map<String, Element> tempMap = new LinkedHashMap<String, Element>(); for (Element ele : elements) { tempMap.put(ele.getName(), ele); } Set<String> keySet = tempMap.keySet(); for (String string : keySet) { Namespace namespace = tempMap.get(string).getNamespace(); List<Element> elements2 = element.elements(new QName(string, namespace)); // 如果同名的数目大于1则表示要构建list if (elements2.size() > 1) { List<Object> list = new ArrayList<Object>(); for (Element ele : elements2) { list.add(xmlToMap(ele)); } map.put(string, list); } else { // 同名的数量不大于1则直接递归去 map.put(string, xmlToMap(elements2.get(0))); } } } return map; } /** * xml转map 带属性 * @param element * @return */ private static Object xmlToMapWithAttr(Element element) { // System.out.println(element.getName()); Map<String, Object> map = new LinkedHashMap<String, Object>(); List<Element> elements = element.elements(); List<Attribute> listAttr = element.attributes(); // 当前节点的所有属性的list boolean hasAttributes = false; for (Attribute attr : listAttr) { hasAttributes = true; map.put("@" + attr.getName(), attr.getValue()); } if (elements.size() == 0) { // map.put(element.getName(), element.getText()); if (hasAttributes) { map.put("#text", element.getText()); } else { map.put(element.getName(), element.getText()); } if (!element.isRootElement()) { // return element.getText(); if (!hasAttributes) { return element.getText(); } } } else if (elements.size() == 1) { map.put(elements.get(0).getName(), xmlToMapWithAttr(elements.get(0))); } else if (elements.size() > 1) { // 多个子节点的话就得考虑list的情况了,比如多个子节点有节点名称相同的 // 构造一个map用来去重 Map<String, Element> tempMap = new LinkedHashMap<String, Element>(); for (Element ele : elements) { tempMap.put(ele.getName(), ele); } Set<String> keySet = tempMap.keySet(); for (String string : keySet) { Namespace namespace = tempMap.get(string).getNamespace(); List<Element> elements2 = element.elements(new QName(string, namespace)); // 如果同名的数目大于1则表示要构建list if (elements2.size() > 1) { List<Object> list = new ArrayList<Object>(); for (Element ele : elements2) { list.add(xmlToMapWithAttr(ele)); } map.put(string, list); } else { // 同名的数量不大于1则直接递归去 map.put(string, xmlToMapWithAttr(elements2.get(0))); } } } return map; } }
参考:
Java xml文件转换为map集合
http://my.oschina.net/u/2253208/blog/500877
java xml转map 高级版
http://xuelianbobo.iteye.com/blog/2153384
相关推荐
使用dom4j封装的工具类,可以实现 xml to map ,map to xml 互相转换,带属性 不带属性,有根节点 和无根节点都可以转换,具体看测试代码
2、bean类的属性如果 是集合 只支持数组以及List、Map、Set。 3、bean类属性(boolean除外)前面两个字母要么全部小写,要么全部大写,否则 无法读存BEAN值。 4、bean类boolean属性(Boolean无此要求),前面三个字母...
Axis2 SOAP XML报文节点首字母小写转大写(注意,是节点,不是节点元素的值),节点命名空间前缀添加与剔除(JAVA)
让xml处理无门槛,你会爱上使用xml文件。 该包主要工作是封装,把操作简单明了化,可以让那些对...上面的3个例子只有取属性,其实还有advanceGetNode("path/map[0]")来直接获取节点,然后就可以针对节点addElement
Ajax&Json&XML常用基本操作 JSON数据和Java对象的相互转换 常见的解析器:Jsonlib,Gson,fastjson,jackson JSON转为Java对象 1. 导入jackson的相关jar包 2. 创建Jackson核心对象 ObjectMapper 3.调用...
12反射 是java程序开发的特征之一,允许java程序对自身进行检查,并能直接操作程序的内部属性; instanceof操作符,instanceof.java; 获取类的信息,ViewClassInfoJrame.java; 动态调用类的方法,CallMetod.java; ...
假设有个bean并且通过语句设置成远程可用,有种类型的参数他本身是一个带有setter的java bean,但setter会产生严重的隐患.攻击者可能促使这隐患的发生.通过下面的语句就可以设置但个类的bean converter 要想允许转换...
java面试试题 全面 准确 带答案 coreJava部分 8 1、面向对象的特征有哪些方面? 8 2、作用域public,private,protected,以及不写时的区别? 8 3、String 是最基本的数据类型吗? 8 4、float 型float f=3.4是否正确? 8 ...
Java进阶13天资料 day01-复习回顾、静态、继承、引用类型使用 day02-抽象类、接口、代码块,final、单例、枚举 day03-多态、包、权限修饰符、内部类,Object类,Date类 day04-常用API、正则表达式,泛型、Collection...
第1章 Java基础 1.1 转换基本数据类型 1.2 Java的运算符 1.3 控制程序的流程 1.4 计算阶乘 1.5 实现命令行程序 第2章 Java面向对象程序设计 2. 1 复数类 2. 2 equals.chashCode...
C.1 创建带有@hibernate标记的Java源文件 C.2 建立项目的目录结构 C.3 运行XDoclet工具 附录D 发布和运行netstore应用 D.1 运行netstore所需的软件 D.2 netstore应用的目录结构 D.3 安装SAMPLEDB...
O Object 对象(Java对象) : 把xml文件封装成Java对象 M Model 模型 解析过程中用到的类: Document Node(节点) Element (元素) Attribute(属性) - Attr Text(文本) ...
基于属性访问或注解的方式将json和POJO对象互相转换, 受JAXB基于注解的处理方式启发。通过org.codehaus.jackson.map.ObjectMapper读写json数据。它包含两种类型: 3.1 Simple Data Binding 用于json和Java Maps, ...
2、java为什么能够跨平台运行? 13 3、String是基本数据类型吗?我可不可以写个类继承于String? 14 4、谈谈&和&&的区别? 14 5、Switch语句里面的条件可不可以是byte、long、String?使用时候还应注意什么? 14 6、...
请用java写二叉树算法,实现添加数据形成二叉树功能,并以先序的方式打印出来. 43.请写一个java程序实现线程连接池功能? 44.给定一个C语言函数,要求实现在java类中进行调用。 45.如何获得数组的长度? 46....
84.9. 题目1:用1、2、2、3、4、5这六个数字,用java写一个main函数,打印出所有不同的排列,如:512234、412345等,要求:"4"不能在第三位,"3"与"5"不能相连. 117 84.10. 写一个方法,实现字符串的反转,如:输入...
Hashtable继承自Dictionary类,而HashMap是Java1.2引进的Map interface的一个实现。 最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在多个线程访问Hashtable时,不需要自己为它的方法实现同步,而...
listB-List<特性2>--表格2 map.listB <#list map.listB as model> …… listC-List<特性3>--表格3 map.listC <#list map.listC as model> …… table2 table-名字 ${map.table} tableName-中文名 ${map....
4、编程用JAVA解析XML的方式. 115 5、XML文档定义有几种形式?它们之间有何本质区别?解析XML文档有哪几种方式? 117 七. 流行的框架与新技术 117 1、谈谈你对Struts的理解。 117 2、谈谈你对Hibernate的理解。 118 ...