注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

dige1993

网页设计 | js、h5开发 | java web开发 | 数据库

 
 
 

日志

 
 
关于我

网页设计,js、h5开发,java web开发,数据库

网易考拉推荐

Java Web开发笔记(7)之 利用JAXB实现Java对象和XML的相互转换  

2014-09-02 18:34:31|  分类: Java Web |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
第一部分 利用Java对象生成XML文件

一般是将POJO转换成XML文件,首先要给POJO添加@XmlRootElement(name = xxx)注解,如果类名和标签名一样,就可以省略 name = xxx(标签名) 这一句,示例Student.java:

package com.lidi.bean;

import javax.xml.bind.annotation.XmlRootElement;

//这是一个根元素

@XmlRootElement(name = "student")
public class Student {

private String name;
private int age;
private String sex;
private String birthday;

public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getBirthday() {
return birthday;
}
public void setBirthday(String birthday) {
this.birthday = birthday;
}
}


程序入口Jaxb_Demo.java:

package com.lidi.main;

import java.io.File;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import com.lidi.bean.Student;

public class Jaxb_Demo {

public static void main(String[] args){
File xmlFile = new File("student.xml");//获取xml文件对象
try {
JAXBContext context = JAXBContext.newInstance(Student.class);//获取JAXBContext对象
Marshaller m = context.createMarshaller();//利用JAXBContext对象生成Marshaller对象

Student student = new Student();//准备好待转换的POJO
student.setName("李维");
student.setAge(12);
student.setSex("男");
student.setBirthday("1993-10-29");

m.marshal(student, xmlFile);//利用Marshaller对象将POJO映射到XML文件
} catch (JAXBException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}
}


执行上面的程序,将在项目根目录下生成一个student.xml文件,文件里的内容如下:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<student>
<age>12</age>
<birthday>1993-10-29</birthday>
<name>李维</name>
<sex>男</sex>
</student>


第二部分 利用XML文件生成java对象
接下来演示将上面的XML文件转换成JAVA对象,程序入口Jaxb_Demo2.java

package com.lidi.main;

import java.io.File;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Unmarshaller;
import com.lidi.bean.Student;

public class Jaxb_Demo2 {

public static void main(String[] args) {
// TODO Auto-generated method stub

File xmlFile = new File("student.xml");//获取xml文件对象
try {
JAXBContext context = JAXBContext.newInstance(Student.class);//获取JAXBContext对象
Unmarshaller um = context.createUnmarshaller();//利用JAXBContext对象生成Unmarshaller对象
Student student = (Student)um.unmarshal(xmlFile);//利用Unmarshaller对象将XML文件映射到java对象

//输出java对象的各项属性
System.out.println("姓名:" + student.getName());
System.out.println("年龄:" + student.getAge());
System.out.println("性别:" + student.getSex());
System.out.println("生日:" + student.getBirthday());
} catch (JAXBException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

}



第三部分 稍微复杂的转换
有一个稍微复杂一点的students.xml待转换,students.xml内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<students>
<student id="1">
<name>奕一</name>
<age>12</age>
<sex>男</sex>
<birthday>1992-10-10</birthday>
</student>
<student id="2">
<name>莫儿</name>
<age>13</age>
<sex>女</sex>
<birthday>1991-01-23</birthday>
</student>
</students>


新建一个StudentData类,里面有一个List<Student>属性,用来存放从XML文件中读取到的student列表,在构造函数中实例化该对象,并且,将StudentData映射到根节点students,StudentData.java代码如下:

package com.lidi.bean;

import java.util.ArrayList;
import java.util.List;
import javax.xml.bind.annotation.XmlRootElement;

//根元素标签名为students
@XmlRootElement(name = "students")
public class StudentData {

private List<Student> student;//必须和节点名称student相同

public StudentData(){
student = new ArrayList<Student>();
}

public List<Student> getStudent() {
return student;
}

public void setStudent(List<Student> student) {
this.student = student;
}
}


程序入口Jaxb_Demo3.java

package com.lidi.main;

import java.io.File;
import java.util.List;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Unmarshaller;
import com.lidi.bean.Student;
import com.lidi.bean.StudentData;

public class Jaxb_Demo3 {

public static void main(String[] args) {
// TODO Auto-generated method stub

File xmlFile = new File("students.xml");
try {
JAXBContext context = JAXBContext.newInstance(StudentData.class);
Unmarshaller um = context.createUnmarshaller();
StudentData data = (StudentData)um.unmarshal(xmlFile);
List<Student> students = data.getStudent();

for(Student student:students){
System.out.println("姓名:" + student.getName());
System.out.println("年龄:" + student.getAge());
System.out.println("性别:" + student.getSex());
System.out.println("生日:" + student.getBirthday());
System.out.println();
}


} catch (JAXBException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

}


执行上面的代码,将在控制台输出xml文件的内容。

然后奉上示例下载地址: http://pan.baidu.com/s/1kTqSUzX
 
  评论这张
 
阅读(57)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018