有时候,我们需要把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. Python笔试题&面试题总结

    黑色加粗的是笔试题,蓝色是面试题 1.什么是GIL 2.Python中的@staticmethod和@classmethod的区别 (**) 3.Python里面如何拷贝一个对象,并解析深浅拷贝 4. ...

  2. win xp 环境变量PATH默认值

    %SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem

  3. 在laravel之外使用eloquent

    视频地址 https://laracasts.com/lessons/how-to-use-eloquent-outside-of-laravel

  4. Java-Runoob-高级教程-实例-环境设置实例:2.Java 实例 – Java 如何运行一个编译过的类文件?

    ylbtech-Java-Runoob-高级教程-实例-环境设置实例:2.Java 实例 – Java 如何运行一个编译过的类文件? 1.返回顶部 1. Java 实例 - 如何执行编译过 Java ...

  5. [MVC 4] ActionResult 使用示例

    在控制器 HomeController.cs 中使用以下代码 public ActionResult Contact() { ViewBag.Message = "Your contact ...

  6. Linux下搭建企业共享目录方案之------samba

    Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件,由服务器及客户端程序构成.SMB(Server Messages Block,信息服务块)是一种在局域网上共享文件和打印机的一种通 ...

  7. Oracle 和 MySQL的区别(不完整)

    1. Oracle对单双引号要求的很死,一般不准用双引号,不然会报错.MySQL 单双引号都可以. 2. 事务提交方式:Oracle 默认手动提交,MySQL 默认自动提交. 3. 分页:MySQL有 ...

  8. 常见的JS和CSS问题

    事件冒泡 DOM的事件冒泡机制和WPF很相似,DOM事件机制包含冒泡和捕获两种,按照topmost element->innermost element方向传递事件被称为捕获方式,而从inner ...

  9. FireMoneky 画图 Point 赋值

    VCL 的 Canvas.Pen 对应FMX: Canvas.Stroke;VCL到 Canvas.Brush 对应FMX: Canvas.Fill. TCircle 圆形控件 Inkscape 0. ...

  10. 理解C# 4 dynamic(4) – 让人惊艳的Clay(转)

    作者:Justrun名字来自<阿甘正传>,是希望自己能够更更傻一点. link: http://www.cnblogs.com/JustRun1983/p/3529157.html   理 ...