参考效果: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.io.StringWriter; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; 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.io.OutputFormat; import org.dom4j.io.XMLWriter; /** * xml转map,map转xml 带属性 * http://happyqing.iteye.com/blog/2316275 * @author happyqing * @since 2016.8.8 */ @SuppressWarnings({ "rawtypes", "unchecked" }) public class XmlUtil { 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"); Map<String, Object> map = xml2map(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)); // 格式化输出 Document doc = map2xml(map, "root"); //Document doc = map2xml(map); //map中含有根节点的键 System.out.println(formatXml(doc)); } /** * xml转map 不带属性 * @param xmlStr * @param needRootKey 是否需要在返回的map里加根节点键 * @return * @throws DocumentException */ public static Map xml2map(String xmlStr, boolean needRootKey) throws DocumentException { Document doc = DocumentHelper.parseText(xmlStr); Element root = doc.getRootElement(); Map<String, Object> map = (Map<String, Object>) xml2map(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 xml2mapWithAttr(String xmlStr, boolean needRootKey) throws DocumentException { Document doc = DocumentHelper.parseText(xmlStr); Element root = doc.getRootElement(); Map<String, Object> map = (Map<String, Object>) xml2mapWithAttr(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 e * @return */ private static Map xml2map(Element e) { Map map = new LinkedHashMap(); 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 = xml2map(iter); if (map.get(iter.getName()) != null) { Object obj = map.get(iter.getName()); if (!(obj instanceof List)) { mapList = new ArrayList(); mapList.add(obj); mapList.add(m); } if (obj instanceof List) { 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 instanceof List)) { mapList = new ArrayList(); mapList.add(obj); mapList.add(iter.getText()); } if (obj instanceof List) { 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; } /** * xml转map 带属性 * @param e * @return */ private static Map xml2mapWithAttr(Element element) { Map<String, Object> map = new LinkedHashMap<String, Object>(); List<Element> list = element.elements(); List<Attribute> 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 = new ArrayList(); if (iter.elements().size() > 0) { Map m = xml2mapWithAttr(iter); if (map.get(iter.getName()) != null) { Object obj = map.get(iter.getName()); if (!(obj instanceof List)) { mapList = new ArrayList(); mapList.add(obj); mapList.add(m); } if (obj instanceof List) { mapList = (List) obj; mapList.add(m); } map.put(iter.getName(), mapList); } else map.put(iter.getName(), m); } else { List<Attribute> listAttr = iter.attributes(); // 当前节点的所有属性的list Map<String, Object> attrMap = null; boolean hasAttributes = false; if (listAttr.size() > 0) { hasAttributes = true; attrMap = new LinkedHashMap<String, Object>(); for (Attribute attr : listAttr) { attrMap.put("@" + attr.getName(), attr.getValue()); } } if (map.get(iter.getName()) != null) { Object obj = map.get(iter.getName()); if (!(obj instanceof List)) { mapList = new ArrayList(); mapList.add(obj); // mapList.add(iter.getText()); if (hasAttributes) { attrMap.put("#text", iter.getText()); mapList.add(attrMap); } else { mapList.add(iter.getText()); } } if (obj instanceof List) { 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()); } } return map; } /** * map转xml map中没有根节点的键 * @param map * @param rootName * @throws DocumentException * @throws IOException */ public static Document map2xml(Map<String, Object> map, String rootName) throws DocumentException, 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)); return doc; } /** * map转xml map中含有根节点的键 * @param map * @throws DocumentException * @throws IOException */ public static Document map2xml(Map<String, Object> map) throws DocumentException, IOException { Iterator<Map.Entry<String, Object>> entries = map.entrySet().iterator(); if(entries.hasNext()){ //获取第一个键创建根节点 Map.Entry<String, Object> 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)); return doc; } return null; } /** * map转xml * @param map * @param body xml元素 * @return */ private static Element map2xml(Map<String, Object> map, Element body) { Iterator<Map.Entry<String, Object>> entries = map.entrySet().iterator(); while (entries.hasNext()) { Map.Entry<String, Object> 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 instanceof java.util.List ){ List list = (List)value; Object obj; for(int i=0; i<list.size(); i++){ obj = list.get(i); //list里是map或String,不会存在list里直接是list的, if(obj instanceof java.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 instanceof java.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()); } return body; } /** * 格式化输出xml * @param xmlStr * @return * @throws DocumentException * @throws IOException */ public static String formatXml(String xmlStr) throws DocumentException, IOException { Document document = DocumentHelper.parseText(xmlStr); return formatXml(document); } /** * 格式化输出xml * @param document * @return * @throws DocumentException * @throws IOException */ public static String formatXml(Document document) throws DocumentException, IOException { // 格式化输出格式 OutputFormat format = OutputFormat.createPrettyPrint(); //format.setEncoding("UTF-8"); StringWriter writer = new StringWriter(); // 格式化输出流 XMLWriter xmlWriter = new XMLWriter(writer, format); // 将document写入到输出流 xmlWriter.write(document); xmlWriter.close(); return writer.toString(); } }
参考:
Java xml文件转换为map集合
http://my.oschina.net/u/2253208/blog/500877
java xml转map 高级版
http://xuelianbobo.iteye.com/blog/2153384
相关推荐
本篇文章将详细介绍如何使用DOM4J库来实现XML和Map之间的转换,并讨论带有属性、无属性、有根节点和无根节点的情况。 DOM4J是一个强大的Java XML API,它提供了灵活且高性能的方式来处理XML文档。在Java中,我们...
首先,从Map中获取键值对,创建相应的XML元素和属性,然后通过Transformer将这些元素转换为XML字符串。`EasyXmlUtil`中应该有一个对应的`mapToXml`方法,接收一个Map对象,返回生成的XML字符串。 在`EasyXmlUtil`类...
在描述中提到的“递归 XML 转 MAP”,是指XML文档可能存在嵌套结构,递归方法是处理这种结构的有效手段。递归意味着函数调用自身来处理XML元素的子节点,直到所有节点都被遍历并转换为Map结构。 以下是一个简化的...
将xml串转换成Map类型,如果有重复节点,自动转换为list类型存储,所以最终转换并非绝对Map
要实现XML到Map的转换,我们可以使用Java的标准库JAXB(Java Architecture for XML Binding)或者第三方库如DOM4J、JDOM、Apache Commons Digester等。这里我们主要讨论使用JAXB的方法,因为它是Java平台的一部分,...
"java转换xml、list、map和json" 本文主要讲述了Java中将xml、list、map和json之间的转换的相关知识点。 xml和map之间的转换 在Java中,xml和map之间的转换可以通过使用dom4j库来实现。dom4j是一个Java开源库,...
3. 创建Map:创建一个`java.util.HashMap`或其他类型的Map,用来存储XML节点的键值对。 4. 将节点添加到Map:遍历过程中,将节点名称作为键,节点内容作为值放入Map中。如果有属性,可以将属性名和属性值作为二级...
在Java编程中,将数据结构如`Map`转换为XML格式是一种常见的需求,尤其是在处理配置文件、数据交换或与Web服务交互时。以下是对如何实现这一转换的深入解析,涵盖了代码逻辑、关键步骤以及可能遇到的问题。 #### 一...
1. **Java List转XML**: - 首先,我们需要一个包含多个Map对象的List。Map对象通常用于存储键值对,键和值可以是任何类型。 - 使用dom4j库,我们可以创建一个Document对象来表示XML文档,Element对象代表XML的...
总结一下,XML转实体类和实体类转XML涉及的主要知识点有:Java反射API、XML解析(DOM、SAX、StAX、JAXB),以及对象的序列化和反序列化。在实际开发中,我们需要根据项目需求选择合适的工具和方法,确保数据的准确...
首先,让我们探讨`Map`集合转成XML字符串的过程。一个`Map`对象存储键值对,可以使用各种库如`JAXB (Java Architecture for XML Binding)`、`DOM (Document Object Model)`或`SAX (Simple API for XML)`来实现转换。...
xml与map转换 这个应用的情况并不多见,一般都在两个系统间沟通的时候会有xml和json的相互转换。因为map和json是天生可相互转换的,所以这里只有xml能和map进行转换,那json就不是问题了。
- `@XmlTransient`:用于忽略指定的Java属性。 - `@XmlJavaTypeAdapter`:配合自定义的适配器类来处理特定类型的序列化和反序列化。 3. 注解使用示例说明: - 使用`@XmlType`时,如果指定了propOrder属性,则...
使用xml转json,可以使用这个工具类,先转成map,之后使用自己的json工具类即可。
Java语言将xml格式数据转map格式数据
3. **自动处理集合和映射**:它可以自动处理Java集合框架,如List、Set和Map,将其转换为XML的数组或元素列表。 4. **类型安全**:通过类型安全的转换,可以确保在反序列化时,对象类型与原始对象匹配。 5. **自定义...
xml2map XML到MAP转换器的Golang编写的转换器 有时需要表示以前未知的结构。 这种通用表示形式通常是JSON,XML或数据映射结构形式的字符串。 类似于map [string] interface {}或map [interface {}] interface {}。 ...
在Java开发中,数据结构的转换是常见的任务之一,例如将Map对象转换为XML格式的字符串,或者将XML数据解析成Map对象。标题提到的"MAP<--->XML格式互相转换接口,已封装,可直接使用(java版)"正是这样一个工具,它...
解析xml文件-转换map新增数据库解析xml文件-转换map新增数据库
java后台从数据库读取 数据,封装到list集合,控制层转化为XML格式数据