有时候,我们需要把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. 黄聪:mysql搬家,直接复制data文件夹(*.MYD,*.MYI,innodb)出错,无法正常显示

    解决办法: 1.复制旧mysql的data文件夹中的数据库到新mysql的data文件夹内. 2.删掉旧的“ib_logfile*”等日志文件,重启MySQL后会自动生成新的日志文件的. 3.复制旧的 ...

  2. 01:zabbix监控redis

    一.zabbix 自动发现并监控redis多实例 1.1 编写脚本 1.1.1 redis_low_discovery.sh 用于发现redis多实例 [root@redis02 homed]# ca ...

  3. 四.jQuery源码解析之jQuery.fn.init()的参数解析

    从return new jQuery.fn.init( selector, context, rootjQuery )中可以看出 参数selector和context是来自我们在调用jQuery方法时 ...

  4. 我对商业模式O2O的理解

    过这个文章不是来吐槽项目经理多麽困难的,而且对商业模式的一点心得和讨论. 在这个公司,从项目建设上讲,老实说贡献不是很大,做项目经理团队带的不好,当然小创业公司本身资源真的非常有限,自己也特别累,有老 ...

  5. sqoop导出到mysql中文乱码问题总结、utf8、gbk

    sqoop导出到mysql中文乱码问题总结.utf8.gbk 今天使用sqoop1.4.5版本的(hadoop使用cdh5.4)因为乱码问题很是头痛半天.下面进行一一总结 命令: [root@sdzn ...

  6. 自定义Hibernate Validator约束

    定义注解 实现一个只能输入指定状态的约束条件 import javax.validation.Constraint; import javax.validation.Payload; import j ...

  7. maven settings.xml 文件

    指定jdk 的版本: <profile> <id>jdk-1.8</id> <activation> <activeByDefault>tr ...

  8. Lrc歌词-开发标准

    LRC歌词是在其程序当中实现的专门用于MP3等歌词同步显示的标签式的纯文本文件,如今已经得到了广泛的运用.现就LRC歌词文件的格式规定详细说明,已供程序开发人员参考. LRC文件是纯文本文件,可以用记 ...

  9. 跟我学算法- tensorflow模型的保存与读取 tf.train.Saver()

    save =  tf.train.Saver() 通过save. save() 实现数据的加载 通过save.restore() 实现数据的导出 第一步: 数据的载入 import tensorflo ...

  10. (转存)面向切面编程(AOP)的理解

    面向切面编程(AOP)的理解 标签: aop编程 2010-06-14 20:17 45894人阅读 评论(11) 收藏 举报  分类: Spring(9)  在传统的编写业务逻辑处理代码时,我们通常 ...