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" } ] }
相关推荐
本篇文章将深入探讨如何在Java中读取XML配置文件,以及如何实现一个简易版的Spring框架。 首先,我们需要导入Java的DOM(Document Object Model)库,它提供了处理XML文档的标准API。在Java中,我们通常使用`javax....
《Java核心技术》第九版...通过学习《Java核心技术》第九版,读者不仅能掌握Java编程的基础,还能了解到许多高级特性和最佳实践,从而提升自己的编程能力。这本书适合初学者入门,也适合有一定经验的开发者查阅和提升。
这份"JAVA API官方文档中文版"是Java开发者的重要参考资料,它详尽地解释了Java平台的各个部分,包括基础类库、集合框架、网络编程、多线程、I/O流、数据库连接(JDBC)、XML处理等众多内容。 首先,Java API文档中...
《Java核心技术·卷2 高级特性(第10版英文版)》是一本由Cay S. Horstmann和Gary Cornell共同撰写的Java编程高级教程书籍。本书的第10版已经更新以反映Java SE 8的语言变化,是Java企业级和桌面应用开发中关于Java...
3. **多线程**:`java.concurrent`包提供了高级并发工具,如ExecutorService、Semaphore、CyclicBarrier等,以支持高效的多线程编程。 4. **图形用户界面(GUI)**:`java.awt`和`javax.swing`包提供了构建桌面应用...
开发者可以通过继承`Thread`类或者实现`Runnable`接口来创建并管理线程,`java.util.concurrent`包则提供了高级并发工具,如`ExecutorService`、`Semaphore`和`Future`。 5. **网络编程**: `java.net`包提供了...
Java API文档中文版是Java开发人员的重要参考资料,它详尽地列出了Java开发工具包(JDK)中所有类、接口、方法和常量的详细信息。这份文档以中文呈现,便于中国开发者理解和使用,避免了语言障碍,使得在工作中解决...
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的强大功能。无论你是初学者还是经验丰富的开发者,这份文档都能提供宝贵的指导和参考。通过深入...
本卷是第二部分,主要关注Java的高级特性,包括并发、网络、图形用户界面(GUI)、XML处理、数据库访问、反射、注解、Java集合框架的高级用法等。以下是这些关键知识点的详细介绍: 1. **并发**:Java提供了一套...
学习和理解这个中文版的Java API文档,开发者不仅可以掌握Java的基本语法,还能深入理解其高级特性,提高编程效率,并为解决实际问题打下坚实基础。对于初学者来说,这是一个不可或缺的学习资料,它将帮助他们快速...
Java API是Java编程语言的核心,它是开发者理解和使用Java平台标准版(Java SE)进行开发的必备参考资料。这个中文版的API文档为中国的开发者提供了一种更方便的方式来查阅和理解Java类库中的各种类、接口、枚举和...
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编程的基础,还能进一步理解面向对象编程的思想,为进阶学习Java的高级特性和框架打下坚实基础。结合书中的实例和练习,读者可以逐步提升自己的编程技能,最终能够独立...
Java API文档中文版是Java开发者的重要参考资料,它详尽地阐述了Java平台标准版(Java SE)的各种类库和接口,涵盖了从基础语法到高级特性的方方面面。对于初学者而言,这份文档是理解和掌握Java编程语言的关键。 ...
5. **XML处理**:介绍如何在Java中解析和生成XML,包括DOM、SAX和JAXB。 6. **注解和元编程**:讲解注解的使用和自定义注解,以及反射API的应用。 这两卷书共同构建了一个全面的Java学习体系,涵盖了从基本编程到...
通过学习《核心Java 第十版》的卷I,你将能够扎实地掌握Java编程的基础,并为进一步学习Java高级特性和框架打下坚实的基础。这份英文PDF版书籍提供了详尽的解释和实例,是Java初学者和进阶者的宝贵资源。
这个"java api 完整版"很可能是包含Java开发所需的全套API文档,涵盖了从基础到高级的各种功能模块。 Java API主要分为几个重要的部分: 1. **核心类库**:这是Java开发的基础,包括`java.lang`、`java.util`、`...
- **XML JAXP**:Java API for XML Processing,用于处理XML文档。 #### `lang` 和 `util` 基础库 - **`lang`**:包含了一些核心类,如`Object`、`Class`、`String`等。 - **`util`**:提供了集合框架、并发工具等...