万能的java对象转xml算法
前言
之前找了好多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算法相关推荐
- java 转xml 变成两根下划线_XStream将java对象转换为xml时,对象字段中的下划线“_”,转换后变成了两个...
使用XStream将java对象转换为xml时,需要对其中的一个字段加上CDATA,于是我自定义了一个XStream,主要代码如下:publicstaticXStreamcreateXstream() ...
- jaxb java xml序列化_XML编程总结(六)——使用JAXB进行java对象和xml格式之间的相互转换...
(六)使用JAXB进行java对象和xml格式之间的相互转换 JAXB能够使用Jackson对JAXB注解的支持实现(jackson-module-jaxb-annotations),既方便生成XML ...
- JAXB实现java对象与xml之间转换
一.Jaxb处理java对象和xml之间转换常用的annotation有: 1. @XmlType 2. @XmlElement 3. @XmlRootElement 4. @XmlAttribute ...
- java对象转xml文件
目录 前言: 正文: 技术:JAXB 步骤: 1.将所需要的xml按照层级结构创建相应的对象 2.对象中需要指定xml节点标签名,有两种方式: (1)第一种: (2)第二种: 3.使用方法: 4.PS ...
- JavaXml教程(八)使用JDOM将Java对象转换为XML
在前面的教程中我们学习了如何使用JDOM解析和修改XML文件内容,本节介绍如何将Java对象转换为XML数据并生成文件. JDOM的Document类提供了便捷的方法创建元素和属性,XMLOutput ...
- 把Java对象转为xml格式
1.在实体类上加@XmlRootElement注解 @XmlRootElement(name = "ROOT") //代表根标签 2.在对应的set方法上加 @XmlElement ...
- Java对象与XML、Excel、TXT文件相互转换
一.目的 文件的存储与导出java对象,文件格式包括xml.txt.xlxs三种文件格式 二.准备 Student 类 /*** 学生的信息(学号.姓名.电话.邮箱信息)** @ClassName S ...
- java对象转xml 高性能_通过实例学习JAVA对象转成XML输出
一.总体说明 XML和JSON 是最为常用的数据交换格式 本例子演示如何将java对象,转成XML输出. 二.流程 1.在上文的例子中,创建一个包"com.waylau.rest.bean& ...
- Java对象转xml报文和xml报文转Java对象帮助类
import javax.xml.bind.JAXBContext; import javax.xml.bind.JAXBException; import javax.xml.bind.Marsha ...
最新文章
- 第十天2017/04/21(1、函数指针、❤动态库回调❤)
- javafx FlowPane布局
- VTK:Rendering之DiffuseSpheres
- 双机/RAC/Dataguard的区别【转】
- OpenCV+python调用本地摄像头并录制视频
- 安装thymeleaf 插件_史上最详细的WordPress安装教程(四):安装mysql 5.7
- linux中禁用Root帐户的4种方法
- [leetcode]Search in Rotated Sorted Array II
- 冷备份实验,裸设备上备份
- 弹弹堂手游语音服务器怎么连接,腾讯弹弹堂手游空间怎么进去 互动玩法攻略介绍...
- 《Python实用爬虫案例》练习8:获取搜狗搜索引擎微信文章
- 电压转电流模块电路设计原理解析
- IPv6/IPv4是什么?IPv4和IPv6有什么区别?
- 【数据结构与算法】之深入解析“扫雷游戏”的求解思路与算法示例
- 什么是编译程序(含翻译程序、解释程序和中间代码的定义介绍)
- Android .mk文件语法规范及使用模板
- word标题编号消失解决
- java中多态的作用,多态的好处,以及为什么要用多态?
- 快播CEO王欣出狱;1号单车宣布停运;网易考拉聚美等海淘商品涉假 丨价值早报
- android学习笔记29--------------XXXXXX.9.png图片
热门文章
- sublime text3 注册码(key 2018-7-10更新)
- 文化基因算法(Memetic Algorithm,MA)
- 【达内课程】简单计算器实现
- 百面机器学习—7.K均值算法、EM算法与高斯混合模型要点总结
- SourceForge访问方法,解被封痛苦之中国伟大的程序员们!
- 阿里云与Intel开启“TOP游戏”云生态培育计划,共建精品游戏生态
- Silverlight 2.5D RPG游戏技巧与特效处理:(十二)魔法系统
- android fence机制,Android中的GraphicBuffer同步機制-Fence
- linux 问答式学习
- 什么是MQ?什么时候使用MQ?为什么要使用MQ?