JAXB小例子实记

来源:互联网 发布:淘宝图片轮播宽度 编辑:程序博客网 时间:2024/05/07 01:30

JAXB(Java Architecture for XML Binding) 是一个业界的标准,是一项可以根据XML Schema产生Java类的技术。该过程中,JAXB也提供了将XML实例文档反向生成Java对象树的方法,并能将Java对象树的内容重新写到 XML实例文档。从另一方面来讲,JAXB提供了快速而简便的方法将XML模式绑定到Java表示,从而使得Java开发者在Java应用程序中能方便地结合XML数据和处理函数。


//通过JAXB将java对象转换为xml
public class JAXBDemo {
 
 public static void main(String[] args) throws JAXBException {
  //调用JAXB上下文,通过调用newInstance,详细可看javaee6的帮助文档
  JAXBContext ctx = JAXBContext.newInstance(Student.class);
  //创建一个marshaller(编排)
  Marshaller mar = ctx.createMarshaller();
  Student stu = new Student("student1", "123");
  //转换对象,并将输入到标准流中
  mar.marshal(stu, System.out);
 }
}

//记得创建@XmlRootElement,如果不写name的属性,默认是类名的小写形式做为xml的root
@XmlRootElement(name="STUDENT")
class Student {
 private String name;
 private String password;
 
 public Student(){}
 
 public Student(String name, String password){
  this.name = name;
  this.password = password;
 }
 
 public String getName() {
  return name;
 }
 public void setName(String name) {
  this.name = name;
 }
 public String getPassword() {
  return password;
 }
 public void setPassword(String password) {
  this.password = password;
 }
 
}

输出结果:<?xml version="1.0" encoding="UTF-8" standalone="yes"?><STUDENT><name>student1</name><password>123</password></STUDENT>

 

package com.czp.test;

import java.io.StringReader;

import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Unmarshaller;
import javax.xml.bind.annotation.XmlRootElement;

//通过xml,转换为java对象
public class JAXBDemo1 {
 
 public static void main(String[] args) throws JAXBException {
  //定义xml字符串
  String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>" +
    "<STUDENT><name>student1</name><password>123</password></STUDENT>";
  
  //获取JAXContext对象,记得要写上实体类,不然会报找不到节点的错误
  JAXBContext ctx = JAXBContext.newInstance(Student.class);
  //创建反编排的对象
  Unmarshaller unmar = ctx.createUnmarshaller();
  //将字符串通过的流的形式反编排,并强制转换
  Student stu = (Student)unmar.unmarshal(new StringReader(xml));
  //打印结果值
  System.out.println("name : " + stu.getName() +", password : " + stu.getPassword());
 }
}

//name的属性值要和XML的root节点一样
@XmlRootElement(name="STUDENT")
class Student {
 private String name;
 private String password;
 
 public Student(){}
 
 public Student(String name, String password){
  this.name = name;
  this.password = password;
 }
 
 public String getName() {
  return name;
 }
 public void setName(String name) {
  this.name = name;
 }
 public String getPassword() {
  return password;
 }
 public void setPassword(String password) {
  this.password = password;
 }
 
}

输出结果:name : student1, password : 123