Java对象和XML转换
有时候,我们需要把Java对象转换成XML文件。这时可以用JAXB来实现。(JDK1.6及以后的版本无需导入依赖包,因为已经包含在JDK里了)
假如某个公司有许多部门,每个部门有许多职员,我们可以这样来设计简单的bean对象。
- @XmlRootElement(name="department")
- public class Department {
- private String name; //部门名称
- private List<Staff> staffs; // 其实staff是单复同型,这里是加's'是为了区别staff
- public String getName() {
- return name;
- }
- @XmlAttribute
- public void setName(String name) {
- this.name = name;
- }
- public List<Staff> getStaffs() {
- return staffs;
- }
- @XmlElement(name="staff")
- public void setStaffs(List<Staff> staffs) {
- this.staffs = staffs;
- }
- }
- @XmlRootElement(name="staff")
- public class Staff {
- private String name; // 职员名称
- private int age; // 职员年龄
- private boolean smoker; // 是否为烟民
- public String getName() {
- return name;
- }
- @XmlElement
- public void setName(String name) {
- this.name = name;
- }
- public int getAge() {
- return age;
- }
- @XmlElement
- public void setAge(int age) {
- this.age = age;
- }
- public boolean isSmoker() {
- return smoker;
- }
- @XmlAttribute
- public void setSmoker(boolean smoker) {
- this.smoker = smoker;
- }
- }
下面将生成一个简单的对象,并转换成XML字符串。
- public class Main {
- public static void main(String[] args) throws Exception {
- JAXBContext context = JAXBContext.newInstance(Department.class,Staff.class); // 获取上下文对象
- Marshaller marshaller = context.createMarshaller(); // 根据上下文获取marshaller对象
- marshaller.setProperty(Marshaller.JAXB_ENCODING, "UTF-8"); // 设置编码字符集
- marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); // 格式化XML输出,有分行和缩进
- marshaller.marshal(getSimpleDepartment(),System.out); // 打印到控制台
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
- marshaller.marshal(getSimpleDepartment(), baos);
- String xmlObj = new String(baos.toByteArray()); // 生成XML字符串
- System.out.println(xmlObj);
- }
- /**
- * 生成一个简单的Department对象
- * @return
- */
- private static Department getSimpleDepartment() {
- List<Staff> staffs = new ArrayList<Staff>();
- Staff stf = new Staff();
- stf.setName("周杰伦");
- stf.setAge(30);
- stf.setSmoker(false);
- staffs.add(stf);
- stf.setName("周笔畅");
- stf.setAge(28);
- stf.setSmoker(false);
- staffs.add(stf);
- stf.setName("周星驰");
- stf.setAge(40);
- stf.setSmoker(true);
- staffs.add(stf);
- Department dept = new Department();
- dept.setName("娱乐圈");
- dept.setStaffs(staffs);
- return dept;
- }
- }
控制台打印信息:
- <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
- <department name="娱乐圈">
- <staff smoker="true">
- <age>40</age>
- <name>周星驰</name>
- </staff>
- <staff smoker="true">
- <age>40</age>
- <name>周星驰</name>
- </staff>
- <staff smoker="true">
- <age>40</age>
- <name>周星驰</name>
- </staff>
- </department>
注意到,我们可以用Marshaller.marshal方法将对象转换成xml文件,也可以用UnMarshaller.unmarshal将xml转换成对象。
Java对象和XML转换的更多相关文章
- 使用XStream注解实现Java对象与XML互相转换的代码示例
		本文记录一下使用xstream这个api的注解特性对Java对象与XML字符串相互转换的一些代码示例. 我们很多人都处理过XML文件,也有很多非常成熟的第三方开源软件.如:jdom.dom4j等 ... 
- JAXB实现java对象与xml之间转换
		JAXB简介: 1.JAXB能够使用Jackson对JAXB注解的支持实现(jackson-module-jaxb-annotations),既方便生成XML,也方便生成JSON,这样一来可以更好的标 ... 
- JAXB 实现java对象与xml之间互相转换
		首先熟悉一下JAXB实现对象与xml互转时常用的一些注解使用: 1.@XmlRootElement,用于类级别的注解,对应xml的跟元素.通过name属性定义这个根节点的名称. 2.@XmlAcces ... 
- jaxb 专题一(JAXB 实现java对象与xml之间互相转换)
		首先熟悉一下JAXB实现对象与xml互转时常用的一些注解使用: 1.@XmlRootElement,用于类级别的注解,对应xml的跟元素.通过name属性定义这个根节点的名称. 2.@XmlAcces ... 
- JAVA对象和XML文档、原来他们之间还有这一出
		最近项目开发中遇到一个问题,访问接口不再通过url地址请求的方式,而是 通过socket发送xml格式的报文到指定服务器来进行信息的统一认证.. 因此组装xml格式的报文字符串以及解析服务器返回的xm ... 
- 玩转Java对象和XML相互转换
		最近在项目中一直出现Java对象和XML之间的相互转换,一开始由于项目很庞大,我又是临时调度过去,导致在按照项目组长的要求进行写代码的同时,总是在这块云里雾里,最近才慢慢开始搞清楚项目中具体的使用缘由 ... 
- java对象与xml相互转换 ----  xstream
		XStream是一个Java对象和XML相互转换的工具,很好很强大.提供了所有的基础类型.数组.集合等类型直接转换的支持. XStream中的核心类就是XStream类,一般来说,熟悉这个类基本就够用 ... 
- java socket报文通信(三)java对象和xml格式文件的相互转换
		前两节讲了socket服务端,客户端的建立以及报文的封装.今天就来讲一下java对象和xml格式文件的相互转换. 上一节中我们列举了一个报文格式,其实我们可以理解为其实就是一个字符串.但是我们不可能每 ... 
- java对象与XML相互转化
		起因 最近在公司做了一次webservice相关的任务,其中我最敢兴趣的就是webservice接受到XML对应的流以后是如何方便的转化成java对象,而java对象又是如何生成对应的XML的. 目的 ... 
随机推荐
- 黄聪:C#使用能够foreach对hashtable、List遍历时“集合已修改;可能无法执行枚举操作。”错误
			解决办法:使用for循环,而不是foreach循环 例如: ArrayList akeys=new ArrayList(_transmit_tb.Keys); ;p> -;p--) { _tra ... 
- Java 中的包装类
			Java 中的包装类 相信各位小伙伴们对基本数据类型都非常熟悉,例如 int.float.double.boolean.char 等.基本数据类型是不具备对象的特性的,比如基本类型不能调用方法.功能简 ... 
- Java缓存相关memcached、redis、guava、Spring Cache的使用
			随笔分类 - Java缓存相关 主要记录memcached.redis.guava.Spring Cache的使用 第十二章 redis-cluster搭建(redis-3.2.5) 摘要: redi ... 
- rpc简易实现-zookeeper
			一.RPC(Remote Procedure Call)—远程过程调用,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议.RPC协议假定某些传输协议的存在,如TCP或UDP, ... 
- 给iOS开发新手送点福利,简述UIAlertView的属性和用法
			UIAlertView 1.Title 获取或设置UIAlertView上的标题. 2.Message 获取或设置UIAlertView上的消息 UIAlertView *alertView = [[ ... 
- mysql迁移之巨大数据量快速迁移方案
			mysql迁移之巨大数据量快速迁移方案-增量备份及恢复 --chenjianwen 一.前言: 当mysql库的大小达到几十个G或者上百G,迁移起来是一件非常费事的事情,业务中断,导出导入耗费大量的时 ... 
- linux上安装oracle
			Linux上安装Oracle 10g: http://69520.blog.51cto.com/59520/91156 
- 运维工具shell简介
			运维第一工具-shell编程 shell历史 Shell的作用是解释执行用户的命令,用户输入一条命令,Shell就解释执行一条,这种方式称为交互式(Interactive),Shell还有一种执行命令 ... 
- JAVA获取txt文件内容
			JAVA 读取txt文件内容 通常,我们可以直接通过文件流来读取txt文件的内容,但有时可能会出现乱码!此时只要设置一下文件字符编码即可. public class txttest { /** * 读 ... 
- Python 2.75升级3.6.3
			https://blog.csdn.net/wwwdaan5com/article/details/78218277 Centos 7 默认yum安装python 是2.7.5, (网上看了很多升级都 ... 
