前言

之前找了好多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. 微软研究院和清华大学联合发布 “开放学术图谱(OAG)2.0版本”
  2. bogofilter 使用
  3. 催收系统服务器,催收系统安装文档/ 环境搭建 /测试服务器 java工程启动文档
  4. Spring-AOP动态代理技术(底层代码)
  5. ajax请求 apend,jsp如何获取ajax append的数据?
  6. 封神-运维大脑 | 日志检测工具
  7. 全网最雕10名月薪超过5W的程序员,和他们的公众号!
  8. excel 数组函数入门讲座
  9. 二元函数对xy同时求导_呆哥数学每日一题 ——求多元函数最小值
  10. ThoughtWorks培训总结
  11. 计算机打不开guest用户,Win10打不开guest账户怎么办?
  12. 基于Docker的Redis集群搭建
  13. H3C防火墙基础配置1-登录配置、安全域配置
  14. Caused by: ParsingException[Failed to parse object: expecting token of type [START_OBJECT] but found
  15. 告别996之Stream学习总结
  16. OceanBase集群手动部署
  17. 【JY】流体力学之牛顿流体和非牛顿流体
  18. iphonex 底部遮挡返回键 解决方法
  19. 说话人识别模型finetune
  20. 小程序页面传值、页面与组件通信方式总结

热门文章

  1. 【anaconda】【Pycharm】failed to create interpreter 或者Pycharm cannot set up a python SDK
  2. SAP案例教程FIAR应收会计前台操作
  3. 短信平台不知道怎么选?来看看这几个平台:
  4. [附源码]Python计算机毕业设计高考志愿智能填报系统
  5. 前端开发div常用属性标签大全
  6. 用计算机玩反恐精英的男孩,玩CS的男人
  7. 2023年全国最新安全员精选真题及答案47
  8. 点菜系统源代码 php,点菜管理系统php源码 超级创新的一个 - 下载 - 搜珍网
  9. 《GAMES104-现代游戏引擎:从入门到实践》-03 学习笔记
  10. 今天是本站参加seo大赛的第二天,博百优的意思解释