`

Dom4j把xml转换成Map(非固定格式)

    博客分类:
  • JAVA
 
阅读更多

将xml转换成Map,能够应对不用结构的xml,而不是只针对固定格式的xml.
转换规则:
1.主要是Map与List的互相嵌套
2.同名称的节点会被装进List

示例:

import java.util.ArrayList; 
import java.util.HashMap; 
import java.util.Iterator; 
import java.util.List; 
import java.util.Map; 
import org.dom4j.Document; 
import org.dom4j.Element; 
public class XmlUtils { 
  @SuppressWarnings("unchecked")  
    public static Map<String, Object> Dom2Map(Document doc){ 
        Map<String, Object> map = new HashMap<String, Object>(); 
        if(doc == null) 
            return map; 
        Element root = doc.getRootElement(); 
        for (Iterator iterator = root.elementIterator(); iterator.hasNext();) { 
            Element e = (Element) iterator.next(); 
            List list = e.elements(); 
            if(list.size() > 0){ 
                map.put(e.getName(), Dom2Map(e)); 
            }else 
                map.put(e.getName(), e.getText()); 
        } 
        return map; 
    } 
     @SuppressWarnings("unchecked")
    public static Map Dom2Map(Element e){ 
        Map map = new HashMap(); 
        List list = e.elements(); 
        if(list.size() > 0){ 
            for (int i = 0;i < list.size(); i++) { 
                Element iter = (Element) list.get(i); 
                List mapList = new ArrayList(); 
                 
                if(iter.elements().size() > 0){ 
                    Map m = Dom2Map(iter); 
                    if(map.get(iter.getName()) != null){ 
                        Object obj = map.get(iter.getName()); 
                        if(!obj.getClass().getName().equals("java.util.ArrayList")){ 
                            mapList = new ArrayList(); 
                            mapList.add(obj); 
                            mapList.add(m); 
                        } 
                        if(obj.getClass().getName().equals("java.util.ArrayList")){ 
                            mapList = (List) obj; 
                            mapList.add(m); 
                        } 
                        map.put(iter.getName(), mapList); 
                    }else 
                        map.put(iter.getName(), m); 
                } 
                else{ 
                    if(map.get(iter.getName()) != null){ 
                        Object obj = map.get(iter.getName()); 
                        if(!obj.getClass().getName().equals("java.util.ArrayList")){ 
                            mapList = new ArrayList(); 
                            mapList.add(obj); 
                            mapList.add(iter.getText()); 
                        } 
                        if(obj.getClass().getName().equals("java.util.ArrayList")){ 
                            mapList = (List) obj; 
                            mapList.add(iter.getText()); 
                        } 
                        map.put(iter.getName(), mapList); 
                    }else 
                        map.put(iter.getName(), iter.getText()); 
                } 
            } 
        }else 
            map.put(e.getName(), e.getText()); 
        return map; 
    } 
} 

 测试类:

import java.io.FileInputStream;
import java.io.IOException;
import java.util.Map;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;

public class XmlToMapDemo {
 public static void main(String[] args) throws IOException,
   DocumentException {
  
  FileInputStream fis = new FileInputStream("d://a.xml");
  byte[] b = new byte[fis.available()];
  fis.read(b);
  String str = new String(b);
  
  Document doc = DocumentHelper.parseText(str);
  
  System.out.println(doc.asXML());

  long beginTime = System.currentTimeMillis();
  
  Map<String, Object> map = XmlUtils.Dom2Map(doc);

  System.out.println(map.toString());
  
  System.out.println("Use time:"+(System.currentTimeMillis()-beginTime));

 }
}

分享到:
评论

相关推荐

    dom4j自动解释xml文件

    在这个主题中,我们将深入探讨DOM4J如何递归地解析XML文件,并将解析结果映射到动态bean或Map中。 首先,让我们了解XML的基本概念。XML(Extensible Markup Language)是一种标记语言,常用于存储和传输结构化数据...

    dom4j 解析xml例子

    8. **转换为其他格式**:DOM4J可以将XML文档转换为其他的Java对象,如`Map`、`List`,甚至可以转换为HTML。此外,还可以使用`StAX`或`SAX`输出流进行流式处理。 通过上述示例和功能,我们可以看出DOM4J是Java开发中...

    java xml和map互转

    本篇文章将详细介绍如何使用DOM4J库来实现XML和Map之间的转换,并讨论带有属性、无属性、有根节点和无根节点的情况。 DOM4J是一个强大的Java XML API,它提供了灵活且高性能的方式来处理XML文档。在Java中,我们...

    dom4j 工具类 使用例子

    DOM4J是一个强大的Java库,专门用于处理XML文档。它提供了简单且高效的API,使得开发者能够轻松地读取、写入、修改以及操作XML文件。在这个"dom4j工具类使用例子"中,我们将深入探讨如何利用DOM4J进行XML处理。 ...

    java一键xml转map,一键map转xml工具类

    在XML和Map的转换过程中,可能用到了如`dom4j`或`jaxb`等库,它们提供了方便的XML操作API。这些库可以通过Maven引入,添加到项目的pom.xml文件中。例如,`dom4j`的依赖可以这样写: ```xml &lt;groupId&gt;dom4j ...

    Dom4j常用jar包

    - Dom4j的许多类都实现了Java集合接口,如`List`和`Map`,这使得我们可以方便地利用Java集合的API来操作XML数据。 在实际应用中,通常会将Dom4j的jar包加入到项目的类路径下,以便于使用。在提供的压缩包文件中,...

    java转换xml、list、map和json

    在Java中,xml和map之间的转换可以通过使用dom4j库来实现。dom4j是一个Java开源库,提供了对XML文档的解析和生成功能。 例如,在上面的代码中,maptoXml方法将Map对象转换为xml字符串。该方法首先创建了一个...

    dom4j-2.1.1.zip

    5. **文档转换**:DOM4J可以将XML文档转换为其他格式,如HTML或PDF,便于数据展示和打印。 6. **与其他库的集成**:DOM4J与许多流行的Java库,如Spring、Hibernate等有良好的集成,能够无缝地融入到各种开发环境中...

    Java xml转化为map

    要实现XML到Map的转换,我们可以使用Java的标准库JAXB(Java Architecture for XML Binding)或者第三方库如DOM4J、JDOM、Apache Commons Digester等。这里我们主要讨论使用JAXB的方法,因为它是Java平台的一部分,...

    dom4j jar包

    // 将XML转换为Map Map, String&gt; map = new HashMap(); map.putAll(XMLHelper.xmlToMap(xmlString)); // 将Java对象转换为XML String xmlString = XMLHelper.mapToXml(map); ``` ### 3. 应用场景 - **配置文件...

    dom4j的属性及应用

    4. **转换为其他格式**:DOM4J还支持将XML文档转换为其他的Java对象,如Map、List,或者反过来将Java对象转换为XML。 5. **XML文档验证**:DOM4J可以结合DTD(文档类型定义)或XSD(XML Schema)来验证XML文档的...

    xmlParse:使用 dom4j 将 XML 文档解析为 Java 对象

    使用 dom4j 将 XML 文档解析为我自己的格式 格式: 私人字符串名称; 私有字符串值; 私人列表 childList; private Map&lt;String&gt; propMap = new HashMap(); 意义 将 XML 文档对象转换成这个格式对象(XmlElement...

    dom4j jar包和简单实例

    DOM4J是一个强大的Java库,专门用于处理XML文档。它提供了灵活且高效的API,使得XML的解析、创建、查询和修改变得更为简单。DOM4J是基于Java集合框架的,这意味着它的API与Java的常规数据结构(如List、Set和Map)...

    dom4j API (javasoft官方文档)

    DOM4J是一个强大的Java XML处理库,它提供了一套丰富的API来操作XML文档。这篇官方文档详细阐述了DOM4J的使用方法和功能,对于理解并应用DOM4J至关重要。以下是对DOM4J API的一些核心知识点的详细解释: 1. **DOM4J...

    map/list集合转化成xml字符串 xml字符串转化成map/list集合

    一个`Map`对象存储键值对,可以使用各种库如`JAXB (Java Architecture for XML Binding)`、`DOM (Document Object Model)`或`SAX (Simple API for XML)`来实现转换。以`JAXB`为例,它提供了一种方便的方式来映射Java...

    Dom4j-1.6.1 API文档.chm

    Dom4j是一个流行的Java库,用于处理XML文档,提供了一套高效且灵活的API,使得XML的解析、创建、操作变得简单易行。本API文档详细介绍了Dom4j 1.6.1版本的功能和用法,是开发者理解和使用该库的重要参考资料。 在...

    Dom4j学习教程+API

    5. **XSLT转换**:Dom4j允许执行XSLT转换,将XML文档转换成其他格式。 6. **XML文档创建和修改**:Dom4j提供了丰富的API来创建、修改和删除XML元素,包括添加、移除、替换和重命名节点。 **使用Dom4j的基本步骤** ...

    dom4j-1.6.1

    6. **转换与生成**:DOM4J不仅可以解析XML,还可以将XML结构转换为其他形式,如Java对象、集合、Map等。同时,也可以将这些对象转换回XML,实现了XML和Java对象之间的双向映射。 7. **文档构建**:DOM4J提供了方便...

    DOM4J-1.6.1

    DOM4J的API设计充分考虑了Java集合框架的集成,使得XML数据可以无缝地与Java集合如List、Set和Map相互转换。 **XPath和XSLT转换** 除了基本的XML操作,DOM4J还支持使用XPath进行选择和转换。结合XSLT(Extensible ...

Global site tag (gtag.js) - Google Analytics