万能的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 ...
最新文章
- 微软研究院和清华大学联合发布 “开放学术图谱(OAG)2.0版本”
- bogofilter 使用
- 催收系统服务器,催收系统安装文档/ 环境搭建 /测试服务器 java工程启动文档
- Spring-AOP动态代理技术(底层代码)
- ajax请求 apend,jsp如何获取ajax append的数据?
- 封神-运维大脑 | 日志检测工具
- 全网最雕10名月薪超过5W的程序员,和他们的公众号!
- excel 数组函数入门讲座
- 二元函数对xy同时求导_呆哥数学每日一题 ——求多元函数最小值
- ThoughtWorks培训总结
- 计算机打不开guest用户,Win10打不开guest账户怎么办?
- 基于Docker的Redis集群搭建
- H3C防火墙基础配置1-登录配置、安全域配置
- Caused by: ParsingException[Failed to parse object: expecting token of type [START_OBJECT] but found
- 告别996之Stream学习总结
- OceanBase集群手动部署
- 【JY】流体力学之牛顿流体和非牛顿流体
- iphonex 底部遮挡返回键 解决方法
- 说话人识别模型finetune
- 小程序页面传值、页面与组件通信方式总结
热门文章
- 【anaconda】【Pycharm】failed to create interpreter 或者Pycharm cannot set up a python SDK
- SAP案例教程FIAR应收会计前台操作
- 短信平台不知道怎么选?来看看这几个平台:
- [附源码]Python计算机毕业设计高考志愿智能填报系统
- 前端开发div常用属性标签大全
- 用计算机玩反恐精英的男孩,玩CS的男人
- 2023年全国最新安全员精选真题及答案47
- 点菜系统源代码 php,点菜管理系统php源码 超级创新的一个 - 下载 - 搜珍网
- 《GAMES104-现代游戏引擎:从入门到实践》-03 学习笔记
- 今天是本站参加seo大赛的第二天,博百优的意思解释