前言

之前找了好多java对象转xml的代码,有的需要加注解很啰嗦,有的遇到结构复杂的对象就报错;没办法,只好自己研究了……

说明

对象转xml的原理就在于分解对象的属性,如果遇到属性值是对象或数组,就继续分解,无限递归,直到搞完为止;

问题的关键在于,怎么才知道属性值是对象或数组,换算成json是一个不错的选择。

资源中包含了一个解析json的jar,如果你不喜欢这个jar,就换一个,总而言之,掌握原理是最棒的!!

资源链接

package com.code;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;

import org.apache.commons.codec.CharEncoding;

import net.sf.json.JSONArray;
import net.sf.json.JSONObject;

/**
 * xml的工具类
 * 
 * @version 1.0
 */
@SuppressWarnings({ "rawtypes", "unchecked" })
public final class XmlUtil {

/**
     * 把对象转换成xml格式的字符串(递归)
     * 
     * @param object
     *            可以是实体类对象, Map
     * @param isHead
     *            是否带头部
     * @return String
     */
    public static String toXml(Object object, boolean isHead) {
        String result = (isHead ? "<?xml version=\"1.0\" encoding=\"" + CharEncoding.UTF_8 + "\" ?>" : "") + "<xml>\n";
        if (null != object) {
            result += toXml(object);
        }
        return result + "</xml>\n";
    }

private static String toXml(Object object) {
        String result = "";
        JSONObject json = JSONObject.fromObject(object);
        Set set = json.keySet();
        for (Object key : set) {
            Object value = json.get(key);
            if (null == value) {
                result += "<" + key + "></" + key + ">\n";
            } else if (value instanceof JSONObject) {
                result += "<" + key + ">\n" + toXml(value) + "</" + key + ">\n";
            } else if (value instanceof JSONArray) {
                result += "<" + key + ">\n";
                JSONArray array = (JSONArray) value;
                for (Object obj : array) {
                    result += toXml(obj);
                }
                result += "</" + key + ">\n";
            } else {
                result += "<" + key + "><![CDATA[" + value + "]]></" + key + ">\n";
            }
        }
        return result;
    }

public static void main(String[] args) {
        Map zhejiang = new HashMap();
        zhejiang.put("name", "浙江");
        Map hangzhou = new HashMap();
        hangzhou.put("name", "杭州");
        Map ningbo = new HashMap();
        ningbo.put("name", "宁波");
        Map fuyang = new HashMap();
        fuyang.put("name", "富阳");
        Map tonglu = new HashMap();
        tonglu.put("name", "桐庐");
        Map fenghua = new HashMap();
        fenghua.put("name", "奉化");
        Map cixi = new HashMap();
        cixi.put("name", "慈溪");
        List citys = new ArrayList();
        citys.add(hangzhou);
        citys.add(ningbo);
        zhejiang.put("child", citys);
        List county_hangzhou = new ArrayList();
        county_hangzhou.add(fuyang);
        county_hangzhou.add(tonglu);
        hangzhou.put("child", county_hangzhou);
        List county_ningbo = new ArrayList();
        county_ningbo.add(fenghua);
        county_ningbo.add(cixi);
        ningbo.put("child", county_ningbo);
        System.out.println(toXml(zhejiang, false));
    }

}
运行后得到结果:

<xml>
    <name><![CDATA[浙江]]></name>
    <child>
        <name><![CDATA[杭州]]></name>
        <child>
            <name><![CDATA[富阳]]></name>
            <name><![CDATA[桐庐]]></name>
        </child>
        <name><![CDATA[宁波]]></name>
        <child>
            <name><![CDATA[奉化]]></name>
            <name><![CDATA[慈溪]]></name>
        </child>
    </child>
</xml>

如果想要搞成一行,就把换行符去掉,有了源码就可以根据自己想要的来修改

万能的java对象转xml算法相关推荐

  1. java 转xml 变成两根下划线_XStream将java对象转换为xml时,对象字段中的下划线“_”,转换后变成了两个...

    使用XStream将java对象转换为xml时,需要对其中的一个字段加上CDATA,于是我自定义了一个XStream,主要代码如下:publicstaticXStreamcreateXstream() ...

  2. jaxb java xml序列化_XML编程总结(六)——使用JAXB进行java对象和xml格式之间的相互转换...

    (六)使用JAXB进行java对象和xml格式之间的相互转换 JAXB能够使用Jackson对JAXB注解的支持实现(jackson-module-jaxb-annotations),既方便生成XML ...

  3. JAXB实现java对象与xml之间转换

    一.Jaxb处理java对象和xml之间转换常用的annotation有: 1. @XmlType 2. @XmlElement 3. @XmlRootElement 4. @XmlAttribute ...

  4. java对象转xml文件

    目录 前言: 正文: 技术:JAXB 步骤: 1.将所需要的xml按照层级结构创建相应的对象 2.对象中需要指定xml节点标签名,有两种方式: (1)第一种: (2)第二种: 3.使用方法: 4.PS ...

  5. JavaXml教程(八)使用JDOM将Java对象转换为XML

    在前面的教程中我们学习了如何使用JDOM解析和修改XML文件内容,本节介绍如何将Java对象转换为XML数据并生成文件. JDOM的Document类提供了便捷的方法创建元素和属性,XMLOutput ...

  6. 把Java对象转为xml格式

    1.在实体类上加@XmlRootElement注解 @XmlRootElement(name = "ROOT") //代表根标签 2.在对应的set方法上加 @XmlElement ...

  7. Java对象与XML、Excel、TXT文件相互转换

    一.目的 文件的存储与导出java对象,文件格式包括xml.txt.xlxs三种文件格式 二.准备 Student 类 /*** 学生的信息(学号.姓名.电话.邮箱信息)** @ClassName S ...

  8. java对象转xml 高性能_通过实例学习JAVA对象转成XML输出

    一.总体说明 XML和JSON 是最为常用的数据交换格式 本例子演示如何将java对象,转成XML输出. 二.流程 1.在上文的例子中,创建一个包"com.waylau.rest.bean& ...

  9. Java对象转xml报文和xml报文转Java对象帮助类

    import javax.xml.bind.JAXBContext; import javax.xml.bind.JAXBException; import javax.xml.bind.Marsha ...

最新文章

  1. 第十天2017/04/21(1、函数指针、❤动态库回调❤)
  2. javafx FlowPane布局
  3. VTK:Rendering之DiffuseSpheres
  4. 双机/RAC/Dataguard的区别【转】
  5. OpenCV+python调用本地摄像头并录制视频
  6. 安装thymeleaf 插件_史上最详细的WordPress安装教程(四):安装mysql 5.7
  7. linux中禁用Root帐户的4种方法
  8. [leetcode]Search in Rotated Sorted Array II
  9. 冷备份实验,裸设备上备份
  10. 弹弹堂手游语音服务器怎么连接,腾讯弹弹堂手游空间怎么进去 互动玩法攻略介绍...
  11. 《Python实用爬虫案例》练习8:获取搜狗搜索引擎微信文章
  12. 电压转电流模块电路设计原理解析
  13. IPv6/IPv4是什么?IPv4和IPv6有什么区别?
  14. 【数据结构与算法】之深入解析“扫雷游戏”的求解思路与算法示例
  15. 什么是编译程序(含翻译程序、解释程序和中间代码的定义介绍)
  16. Android .mk文件语法规范及使用模板
  17. word标题编号消失解决
  18. java中多态的作用,多态的好处,以及为什么要用多态?
  19. 快播CEO王欣出狱;1号单车宣布停运;网易考拉聚美等海淘商品涉假 丨价值早报
  20. android学习笔记29--------------XXXXXX.9.png图片

热门文章

  1. sublime text3 注册码(key 2018-7-10更新)
  2. 文化基因算法(Memetic Algorithm,MA)
  3. 【达内课程】简单计算器实现
  4. 百面机器学习—7.K均值算法、EM算法与高斯混合模型要点总结
  5. SourceForge访问方法,解被封痛苦之中国伟大的程序员们!
  6. 阿里云与Intel开启“TOP游戏”云生态培育计划,共建精品游戏生态
  7. Silverlight 2.5D RPG游戏技巧与特效处理:(十二)魔法系统
  8. android fence机制,Android中的GraphicBuffer同步機制-Fence
  9. linux 问答式学习
  10. 什么是MQ?什么时候使用MQ?为什么要使用MQ?