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的. 目的 ...
随机推荐
- OpenSSL编写SSL,TLS程序***
一.简介 SSL(Secure Socket Layer)是netscape公司提出的主要用于web的安全通信标准,分为2.0版和3.0版.TLS(Transport Layer Security)是 ...
- android单元测试 activity跳转 以及 input 输入后 测试
Android junit实现多个Activity跳转测试 分类: Android Junit测试2011-11-14 16:49 1601人阅读 评论(2) 收藏 举报 androidjunitla ...
- [模板]ST表浅析
ST表,稀疏表,用于求解经典的RMQ问题.即区间最值问题. Problem: 给定n个数和q个询问,对于给定的每个询问有l,r,求区间[l,r]的最大值.. Solution: 主要思想是倍增和区间d ...
- zufeoj 1018 阶乘第k位是多少(sprintf)
题目描述 n的阶乘定义为n!=1*2*3*……*n 如3!=6 n!通常最后会有很多0,如5!=120 最后有一个0,现在统计n!去除末尾的0后,最后k位是多少 输入 第一 ...
- nohup 后台运行命令
在Linux上部署zipkin,在SSH客户端执行java -jar zipkin-server-1.21.0-exec.jar,启动成功,在关闭SSH客户端后,运行的程序也同时终止了,怎样才能保证在 ...
- JavaScript(三) - 精简
javascript 对象 1 什么是对象? 对象只是一种特殊的数据,对象拥有属性和方法. 2 对象有哪些? js中所有的事物都是对象:字符串,数值,数组,函数. js允许自定义对象.提供多个内建对象 ...
- bom知识点
1.BOM输出 所谓BOM指的是浏览器对象模型 Browser Object Model,它的核心就是浏览器 alert(1);//弹出框 调式使用 console.log('路飞学城');//用于浏 ...
- sql多表更新使用别名(小技巧)
update A set A.CityRegionID=B.ParentID, A.CityName=(select RegionName from Common_Region ...
- 安装Android studio出现'tools.jar' seems to be not in Android Studio classpath......的解决方法
安装Android studio出现'tools.jar' seems to be not in Android Studio classpath......的解决方法 原创 2015年07月31日 ...
- CentOS7 安装svn
1 yum install subversion 2 运行 svn --version 报错 svn: error while loading shared libraries: libaprutil ...