`
xuelianbobo
  • 浏览: 174816 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

java xml转map 高级版

阅读更多

 

 

 

 xml文件如下:

<?xml version="1.0" encoding="UTF-8"?>
<root>
	<classs>
		<id>001</id>
		<name>st001</name>
		<student>
			<id>0001</id>
			<name>
				<first>xue</first>
				<last>bo</last>
			</name>
		</student>
	</classs>
	<classs>
		<id>001</id>
		<name>st001</name>
		<student>
			<id>0001</id>
			<name>
				<first>xue</first>
				<last>bo</last>
			</name>
		</student>
	</classs>
</root>

 用上一篇文章中的工具转换后,再转成json的结构如下:

 

{
    "classs": [
        {
            "id": {
                "id": "001"
            },
            "student": {
                "id": {
                    "id": "0001"
                },
                "name": {
                    "last": {
                        "last": "bo"
                    },
                    "first": {
                        "first": "xue"
                    }
                }
            },
            "name": {
                "name": "st001"
            }
        },
        {
            "id": {
                "id": "001"
            },
            "student": {
                "id": {
                    "id": "0001"
                },
                "name": {
                    "last": {
                        "last": "bo"
                    },
                    "first": {
                        "first": "xue"
                    }
                }
            },
            "name": {
                "name": "st001"
            }
        }
    ]
}

 本文用最新的代码实现新的转换使结果更加理想。

代码如下:

package com.xue.tools;

import java.io.File;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;

import net.sf.json.JSONObject;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.Namespace;
import org.dom4j.QName;

import com.xue.tools.text.MyTextUtil;

public class Test2 {
	public static void main(String[] args) throws UnsupportedEncodingException, DocumentException {
		String textFromFile = MyTextUtil.getTextFromFile(new File("src/tt.xml"));
		Document doc = DocumentHelper.parseText(textFromFile);
		Map<String, Object> map = (Map<String, Object>) xml2map(doc.getRootElement());
		System.out.println(JSONObject.fromObject(map));
	}

	private static Object xml2map(Element element) {
		System.out.println(element);
		Map<String, Object> map = new HashMap<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(), xml2map(elements.get(0)));
		} else if (elements.size() > 1) {
			// 多个子节点的话就得考虑list的情况了,比如多个子节点有节点名称相同的
			// 构造一个map用来去重
			Map<String, Element> tempMap = new HashMap<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(xml2map(ele));
					}
					map.put(string, list);
				} else {
					// 同名的数量不大于1则直接递归去
					map.put(string, xml2map(elements2.get(0)));
				}
			}
		}

		return map;
	}
}

 

结果如下:

{
    "classs": [
        {
            "id": "001",
            "student": {
                "id": "0001",
                "name": {
                    "last": "bo",
                    "first": "xue"
                }
            },
            "name": "st001"
        },
        {
            "id": "001",
            "student": {
                "id": "0001",
                "name": {
                    "last": "bo",
                    "first": "xue"
                }
            },
            "name": "st001"
        }
    ]
}

 

 

0
0
分享到:
评论

相关推荐

    java读取 配置 xml文件

    本篇文章将深入探讨如何在Java中读取XML配置文件,以及如何实现一个简易版的Spring框架。 首先,我们需要导入Java的DOM(Document Object Model)库,它提供了处理XML文档的标准API。在Java中,我们通常使用`javax....

    java核心技术第九版

    《Java核心技术》第九版...通过学习《Java核心技术》第九版,读者不仅能掌握Java编程的基础,还能了解到许多高级特性和最佳实践,从而提升自己的编程能力。这本书适合初学者入门,也适合有一定经验的开发者查阅和提升。

    JAVA API官方文档中文版

    这份"JAVA API官方文档中文版"是Java开发者的重要参考资料,它详尽地解释了Java平台的各个部分,包括基础类库、集合框架、网络编程、多线程、I/O流、数据库连接(JDBC)、XML处理等众多内容。 首先,Java API文档中...

    Java核心技术·卷2 高级特性(第10版英文版)

    《Java核心技术·卷2 高级特性(第10版英文版)》是一本由Cay S. Horstmann和Gary Cornell共同撰写的Java编程高级教程书籍。本书的第10版已经更新以反映Java SE 8的语言变化,是Java企业级和桌面应用开发中关于Java...

    JAVA API官方文档 中文版

    3. **多线程**:`java.concurrent`包提供了高级并发工具,如ExecutorService、Semaphore、CyclicBarrier等,以支持高效的多线程编程。 4. **图形用户界面(GUI)**:`java.awt`和`javax.swing`包提供了构建桌面应用...

    Java api html完整中文版

    开发者可以通过继承`Thread`类或者实现`Runnable`接口来创建并管理线程,`java.util.concurrent`包则提供了高级并发工具,如`ExecutorService`、`Semaphore`和`Future`。 5. **网络编程**: `java.net`包提供了...

    JavaAPI文档中文版

    Java API文档中文版是Java开发人员的重要参考资料,它详尽地列出了Java开发工具包(JDK)中所有类、接口、方法和常量的详细信息。这份文档以中文呈现,便于中国开发者理解和使用,避免了语言障碍,使得在工作中解决...

    Java文档中文版api离线chm版

    10. **XML处理**:Java 1.6包含了处理XML的API,如`javax.xml.parsers.DocumentBuilderFactory`用于解析XML文档,`javax.xml.transform`包用于转换XML数据。 `JDK_API_1_6_zh_CN.CHM`是主文件,包含了所有API的详细...

    java api官方文档中文版

    总的来说,Java API中文版是一个全面的开发者指南,涵盖了从基础编程到高级特性的所有内容,帮助开发者充分利用Java的强大功能。无论你是初学者还是经验丰富的开发者,这份文档都能提供宝贵的指导和参考。通过深入...

    Core Java Volume II--Advanced Features(10th) Java核心技术第10版 第二卷 英文版

    本卷是第二部分,主要关注Java的高级特性,包括并发、网络、图形用户界面(GUI)、XML处理、数据库访问、反射、注解、Java集合框架的高级用法等。以下是这些关键知识点的详细介绍: 1. **并发**:Java提供了一套...

    中文版本 java api

    学习和理解这个中文版的Java API文档,开发者不仅可以掌握Java的基本语法,还能深入理解其高级特性,提高编程效率,并为解决实际问题打下坚实基础。对于初学者来说,这是一个不可或缺的学习资料,它将帮助他们快速...

    java api 官方文档中文版

    Java API是Java编程语言的核心,它是开发者理解和使用Java平台标准版(Java SE)进行开发的必备参考资料。这个中文版的API文档为中国的开发者提供了一种更方便的方式来查阅和理解Java类库中的各种类、接口、枚举和...

    最新Java API文档(英文版)

    9. **XML处理**:Java提供DOM(Document Object Model)、SAX(Simple API for XML)和StAX(Streaming API for XML)等API处理XML文档,方便解析、生成和操作XML数据。 10. **Swing和AWT**:这两者是Java GUI...

    Java 2实用教程第4版

    学习《Java 2实用教程第4版》不仅能够掌握Java编程的基础,还能进一步理解面向对象编程的思想,为进阶学习Java的高级特性和框架打下坚实基础。结合书中的实例和练习,读者可以逐步提升自己的编程技能,最终能够独立...

    java API文档中文版

    Java API文档中文版是Java开发者的重要参考资料,它详尽地阐述了Java平台标准版(Java SE)的各种类库和接口,涵盖了从基础语法到高级特性的方方面面。对于初学者而言,这份文档是理解和掌握Java编程语言的关键。 ...

    Java 2 核心技术(第7版) CoreJAVA 7th Edithon(chm版)

    5. **XML处理**:介绍如何在Java中解析和生成XML,包括DOM、SAX和JAXB。 6. **注解和元编程**:讲解注解的使用和自定义注解,以及反射API的应用。 这两卷书共同构建了一个全面的Java学习体系,涵盖了从基本编程到...

    core java 第十版

    通过学习《核心Java 第十版》的卷I,你将能够扎实地掌握Java编程的基础,并为进一步学习Java高级特性和框架打下坚实的基础。这份英文PDF版书籍提供了详尽的解释和实例,是Java初学者和进阶者的宝贵资源。

    java api 完整版

    这个"java api 完整版"很可能是包含Java开发所需的全套API文档,涵盖了从基础到高级的各种功能模块。 Java API主要分为几个重要的部分: 1. **核心类库**:这是Java开发的基础,包括`java.lang`、`java.util`、`...

    map of java平台

    - **XML JAXP**:Java API for XML Processing,用于处理XML文档。 #### `lang` 和 `util` 基础库 - **`lang`**:包含了一些核心类,如`Object`、`Class`、`String`等。 - **`util`**:提供了集合框架、并发工具等...

Global site tag (gtag.js) - Google Analytics