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的. 目的 ...
随机推荐
- Python笔试题&面试题总结
黑色加粗的是笔试题,蓝色是面试题 1.什么是GIL 2.Python中的@staticmethod和@classmethod的区别 (**) 3.Python里面如何拷贝一个对象,并解析深浅拷贝 4. ...
- win xp 环境变量PATH默认值
%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem
- 在laravel之外使用eloquent
视频地址 https://laracasts.com/lessons/how-to-use-eloquent-outside-of-laravel
- Java-Runoob-高级教程-实例-环境设置实例:2.Java 实例 – Java 如何运行一个编译过的类文件?
ylbtech-Java-Runoob-高级教程-实例-环境设置实例:2.Java 实例 – Java 如何运行一个编译过的类文件? 1.返回顶部 1. Java 实例 - 如何执行编译过 Java ...
- [MVC 4] ActionResult 使用示例
在控制器 HomeController.cs 中使用以下代码 public ActionResult Contact() { ViewBag.Message = "Your contact ...
- Linux下搭建企业共享目录方案之------samba
Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件,由服务器及客户端程序构成.SMB(Server Messages Block,信息服务块)是一种在局域网上共享文件和打印机的一种通 ...
- Oracle 和 MySQL的区别(不完整)
1. Oracle对单双引号要求的很死,一般不准用双引号,不然会报错.MySQL 单双引号都可以. 2. 事务提交方式:Oracle 默认手动提交,MySQL 默认自动提交. 3. 分页:MySQL有 ...
- 常见的JS和CSS问题
事件冒泡 DOM的事件冒泡机制和WPF很相似,DOM事件机制包含冒泡和捕获两种,按照topmost element->innermost element方向传递事件被称为捕获方式,而从inner ...
- FireMoneky 画图 Point 赋值
VCL 的 Canvas.Pen 对应FMX: Canvas.Stroke;VCL到 Canvas.Brush 对应FMX: Canvas.Fill. TCircle 圆形控件 Inkscape 0. ...
- 理解C# 4 dynamic(4) – 让人惊艳的Clay(转)
作者:Justrun名字来自<阿甘正传>,是希望自己能够更更傻一点. link: http://www.cnblogs.com/JustRun1983/p/3529157.html 理 ...