有时候,我们需要把Java对象转换成XML文件。这时可以用JAXB来实现。(JDK1.6及以后的版本无需导入依赖包,因为已经包含在JDK里了)

假如某个公司有许多部门,每个部门有许多职员,我们可以这样来设计简单的bean对象。

  1. @XmlRootElement(name="department")
  2. public class Department {
  3. private String name;    //部门名称
  4. private List<Staff> staffs;           // 其实staff是单复同型,这里是加's'是为了区别staff
  5. public String getName() {
  6. return name;
  7. }
  8. @XmlAttribute
  9. public void setName(String name) {
  10. this.name = name;
  11. }
  12. public List<Staff> getStaffs() {
  13. return staffs;
  14. }
  15. @XmlElement(name="staff")
  16. public void setStaffs(List<Staff> staffs) {
  17. this.staffs = staffs;
  18. }
  19. }
  1. @XmlRootElement(name="staff")
  2. public class Staff {
  3. private String name;    // 职员名称
  4. private int age;        // 职员年龄
  5. private boolean smoker; // 是否为烟民
  6. public String getName() {
  7. return name;
  8. }
  9. @XmlElement
  10. public void setName(String name) {
  11. this.name = name;
  12. }
  13. public int getAge() {
  14. return age;
  15. }
  16. @XmlElement
  17. public void setAge(int age) {
  18. this.age = age;
  19. }
  20. public boolean isSmoker() {
  21. return smoker;
  22. }
  23. @XmlAttribute
  24. public void setSmoker(boolean smoker) {
  25. this.smoker = smoker;
  26. }
  27. }

下面将生成一个简单的对象,并转换成XML字符串。

  1. public class Main {
  2. public static void main(String[] args) throws Exception {
  3. JAXBContext context = JAXBContext.newInstance(Department.class,Staff.class);    // 获取上下文对象
  4. Marshaller marshaller = context.createMarshaller(); // 根据上下文获取marshaller对象
  5. marshaller.setProperty(Marshaller.JAXB_ENCODING, "UTF-8");  // 设置编码字符集
  6. marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); // 格式化XML输出,有分行和缩进
  7. marshaller.marshal(getSimpleDepartment(),System.out);   // 打印到控制台
  8. ByteArrayOutputStream baos = new ByteArrayOutputStream();
  9. marshaller.marshal(getSimpleDepartment(), baos);
  10. String xmlObj = new String(baos.toByteArray());         // 生成XML字符串
  11. System.out.println(xmlObj);
  12. }
  13. /**
  14. * 生成一个简单的Department对象
  15. * @return
  16. */
  17. private static Department getSimpleDepartment() {
  18. List<Staff> staffs = new ArrayList<Staff>();
  19. Staff stf = new Staff();
  20. stf.setName("周杰伦");
  21. stf.setAge(30);
  22. stf.setSmoker(false);
  23. staffs.add(stf);
  24. stf.setName("周笔畅");
  25. stf.setAge(28);
  26. stf.setSmoker(false);
  27. staffs.add(stf);
  28. stf.setName("周星驰");
  29. stf.setAge(40);
  30. stf.setSmoker(true);
  31. staffs.add(stf);
  32. Department dept = new Department();
  33. dept.setName("娱乐圈");
  34. dept.setStaffs(staffs);
  35. return dept;
  36. }
  37. }

控制台打印信息:

  1. <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
  2. <department name="娱乐圈">
  3. <staff smoker="true">
  4. <age>40</age>
  5. <name>周星驰</name>
  6. </staff>
  7. <staff smoker="true">
  8. <age>40</age>
  9. <name>周星驰</name>
  10. </staff>
  11. <staff smoker="true">
  12. <age>40</age>
  13. <name>周星驰</name>
  14. </staff>
  15. </department>

注意到,我们可以用Marshaller.marshal方法将对象转换成xml文件,也可以用UnMarshaller.unmarshal将xml转换成对象。

Java对象和XML转换的更多相关文章

  1. 使用XStream注解实现Java对象与XML互相转换的代码示例

    本文记录一下使用xstream这个api的注解特性对Java对象与XML字符串相互转换的一些代码示例.    我们很多人都处理过XML文件,也有很多非常成熟的第三方开源软件.如:jdom.dom4j等 ...

  2. JAXB实现java对象与xml之间转换

    JAXB简介: 1.JAXB能够使用Jackson对JAXB注解的支持实现(jackson-module-jaxb-annotations),既方便生成XML,也方便生成JSON,这样一来可以更好的标 ...

  3. JAXB 实现java对象与xml之间互相转换

    首先熟悉一下JAXB实现对象与xml互转时常用的一些注解使用: 1.@XmlRootElement,用于类级别的注解,对应xml的跟元素.通过name属性定义这个根节点的名称. 2.@XmlAcces ...

  4. jaxb 专题一(JAXB 实现java对象与xml之间互相转换)

    首先熟悉一下JAXB实现对象与xml互转时常用的一些注解使用: 1.@XmlRootElement,用于类级别的注解,对应xml的跟元素.通过name属性定义这个根节点的名称. 2.@XmlAcces ...

  5. JAVA对象和XML文档、原来他们之间还有这一出

    最近项目开发中遇到一个问题,访问接口不再通过url地址请求的方式,而是 通过socket发送xml格式的报文到指定服务器来进行信息的统一认证.. 因此组装xml格式的报文字符串以及解析服务器返回的xm ...

  6. 玩转Java对象和XML相互转换

    最近在项目中一直出现Java对象和XML之间的相互转换,一开始由于项目很庞大,我又是临时调度过去,导致在按照项目组长的要求进行写代码的同时,总是在这块云里雾里,最近才慢慢开始搞清楚项目中具体的使用缘由 ...

  7. java对象与xml相互转换 ---- xstream

    XStream是一个Java对象和XML相互转换的工具,很好很强大.提供了所有的基础类型.数组.集合等类型直接转换的支持. XStream中的核心类就是XStream类,一般来说,熟悉这个类基本就够用 ...

  8. java socket报文通信(三)java对象和xml格式文件的相互转换

    前两节讲了socket服务端,客户端的建立以及报文的封装.今天就来讲一下java对象和xml格式文件的相互转换. 上一节中我们列举了一个报文格式,其实我们可以理解为其实就是一个字符串.但是我们不可能每 ...

  9. java对象与XML相互转化

    起因 最近在公司做了一次webservice相关的任务,其中我最敢兴趣的就是webservice接受到XML对应的流以后是如何方便的转化成java对象,而java对象又是如何生成对应的XML的. 目的 ...

随机推荐

  1. C语言:宽字符集操作函数(unicode编码)

    C语言:宽字符集操作函数(unicode编码) 字符分类: 宽字符函数 普通C函数描述 iswalnum() isalnum() 测试字符是否为数字或字母 iswalpha() isalpha() 测 ...

  2. 使用Amoeba实现mysql读写分离机制

    Amoeba的实用指南 http://docs.hexnova.com/amoeba/ 如何实现mysql读写分离 : 通常来说有两种方式: 1,应用程序层实现 2,中间件层实现 应用层实现 应用层实 ...

  3. Script_Notepad++如何调试VBS脚本

    一.NotePad++安装 1. 下载并安装Notepad++,安装步骤一路Next就可以了. 二.NppExec插件安装和配置 1. 下载并解压 NppExec_041_dll_Unicode.zi ...

  4. pythonNet day07

    信号 一个进程向另外一个进程通过信号的方式传递某种讯息,接收方在接收到信号后作出相应的处理 查看信号:kill -l kill -signum PID 给PID的进程发送一个信号 信号名称:信号的名字 ...

  5. 软件测试——等价类划分(EditText * 3)

    一.程序要求 EditBox 同时允许输入三个1到6个英文字符或数字,点击确定结束. 二.测试分析 编号 第一个输入框 第二个输入框 第三个输入框 输出 1 null null null 三个输入框均 ...

  6. 温故而知新-面向对象的PHP

    1 类的多态 不同的类对同一操作可以有不同的行为. 比如自行车和汽车都有移动这个成员函数行为, 那么自行车类可以移动,行为和汽车的移动行为肯定不同. 2 析构函数不能有参数 3 __set和__get ...

  7. 通过 Lua 扩展 NGINX 实现的可伸缩的 Web 平台OpenResty®

    OpenResty® 是一个基于 Nginx 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库.第三方模块以及大多数的依赖项.用于方便地搭建能够处理超高并发.扩展性极高的动态 W ...

  8. Wasserstein距离 和 Lipschitz连续

    EMD(earth mover distance)距离: 在计算机科学与技术中,地球移动距离(EMD)是一种在D区域两个概率分布距离的度量,就是被熟知的Wasserstein度量标准.不正式的说,如果 ...

  9. Linux测试环境搭建apache+mysql+php

    Linux Red Hat Enterprise Linux Server release 5.4 (Tikanga) Kernel \r on an \m Apache +Mysql+php 搭建准 ...

  10. Vim中异步语法检查ale配置

    注意 在设置let g:ale_sign_error = '✗'和let g:ale_sign_warning = '⚡'这些时,可能vim不让你保存,提示fenc这个东西. 所以,为了保险起见,你最 ...