将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文件,并将解析结果映射到动态bean或Map中。 首先,让我们了解XML的基本概念。XML(Extensible Markup Language)是一种标记语言,常用于存储和传输结构化数据...
8. **转换为其他格式**:DOM4J可以将XML文档转换为其他的Java对象,如`Map`、`List`,甚至可以转换为HTML。此外,还可以使用`StAX`或`SAX`输出流进行流式处理。 通过上述示例和功能,我们可以看出DOM4J是Java开发中...
本篇文章将详细介绍如何使用DOM4J库来实现XML和Map之间的转换,并讨论带有属性、无属性、有根节点和无根节点的情况。 DOM4J是一个强大的Java XML API,它提供了灵活且高性能的方式来处理XML文档。在Java中,我们...
DOM4J是一个强大的Java库,专门用于处理XML文档。它提供了简单且高效的API,使得开发者能够轻松地读取、写入、修改以及操作XML文件。在这个"dom4j工具类使用例子"中,我们将深入探讨如何利用DOM4J进行XML处理。 ...
在XML和Map的转换过程中,可能用到了如`dom4j`或`jaxb`等库,它们提供了方便的XML操作API。这些库可以通过Maven引入,添加到项目的pom.xml文件中。例如,`dom4j`的依赖可以这样写: ```xml <groupId>dom4j ...
- Dom4j的许多类都实现了Java集合接口,如`List`和`Map`,这使得我们可以方便地利用Java集合的API来操作XML数据。 在实际应用中,通常会将Dom4j的jar包加入到项目的类路径下,以便于使用。在提供的压缩包文件中,...
在Java中,xml和map之间的转换可以通过使用dom4j库来实现。dom4j是一个Java开源库,提供了对XML文档的解析和生成功能。 例如,在上面的代码中,maptoXml方法将Map对象转换为xml字符串。该方法首先创建了一个...
5. **文档转换**:DOM4J可以将XML文档转换为其他格式,如HTML或PDF,便于数据展示和打印。 6. **与其他库的集成**:DOM4J与许多流行的Java库,如Spring、Hibernate等有良好的集成,能够无缝地融入到各种开发环境中...
要实现XML到Map的转换,我们可以使用Java的标准库JAXB(Java Architecture for XML Binding)或者第三方库如DOM4J、JDOM、Apache Commons Digester等。这里我们主要讨论使用JAXB的方法,因为它是Java平台的一部分,...
// 将XML转换为Map Map, String> map = new HashMap(); map.putAll(XMLHelper.xmlToMap(xmlString)); // 将Java对象转换为XML String xmlString = XMLHelper.mapToXml(map); ``` ### 3. 应用场景 - **配置文件...
4. **转换为其他格式**:DOM4J还支持将XML文档转换为其他的Java对象,如Map、List,或者反过来将Java对象转换为XML。 5. **XML文档验证**:DOM4J可以结合DTD(文档类型定义)或XSD(XML Schema)来验证XML文档的...
使用 dom4j 将 XML 文档解析为我自己的格式 格式: 私人字符串名称; 私有字符串值; 私人列表 childList; private Map<String> propMap = new HashMap(); 意义 将 XML 文档对象转换成这个格式对象(XmlElement...
DOM4J是一个强大的Java库,专门用于处理XML文档。它提供了灵活且高效的API,使得XML的解析、创建、查询和修改变得更为简单。DOM4J是基于Java集合框架的,这意味着它的API与Java的常规数据结构(如List、Set和Map)...
DOM4J是一个强大的Java XML处理库,它提供了一套丰富的API来操作XML文档。这篇官方文档详细阐述了DOM4J的使用方法和功能,对于理解并应用DOM4J至关重要。以下是对DOM4J API的一些核心知识点的详细解释: 1. **DOM4J...
一个`Map`对象存储键值对,可以使用各种库如`JAXB (Java Architecture for XML Binding)`、`DOM (Document Object Model)`或`SAX (Simple API for XML)`来实现转换。以`JAXB`为例,它提供了一种方便的方式来映射Java...
Dom4j是一个流行的Java库,用于处理XML文档,提供了一套高效且灵活的API,使得XML的解析、创建、操作变得简单易行。本API文档详细介绍了Dom4j 1.6.1版本的功能和用法,是开发者理解和使用该库的重要参考资料。 在...
5. **XSLT转换**:Dom4j允许执行XSLT转换,将XML文档转换成其他格式。 6. **XML文档创建和修改**:Dom4j提供了丰富的API来创建、修改和删除XML元素,包括添加、移除、替换和重命名节点。 **使用Dom4j的基本步骤** ...
6. **转换与生成**:DOM4J不仅可以解析XML,还可以将XML结构转换为其他形式,如Java对象、集合、Map等。同时,也可以将这些对象转换回XML,实现了XML和Java对象之间的双向映射。 7. **文档构建**:DOM4J提供了方便...
DOM4J的API设计充分考虑了Java集合框架的集成,使得XML数据可以无缝地与Java集合如List、Set和Map相互转换。 **XPath和XSLT转换** 除了基本的XML操作,DOM4J还支持使用XPath进行选择和转换。结合XSLT(Extensible ...