@XmlAccessorType(XmlAccessType.FIELD)
// 用于控制字段或属性的序列化。
// FIELD ,JAXB 绑定类中的每个非静态、非瞬态字段将会自动绑定到 XML
// NONE, 只有使用一些 JAXB 注释专门对它们进行注释的所有字段或属性才绑定到 XML。
// PROPERTY, JAXB 绑定类中的每个获取方法/设置方法对将会自动绑定到 XML
// PUBLIC_MEMBER, 每个公共获取方法/设置方法对和每个公共字段将会自动绑定到 XML
// 包上的 @XmlAccessorType 注释可应用于包中的所有类
@XmlType(propOrder = ... {"job","address"} )
@XmlRootElement
// 表示person是一个根元素
class Person ... {
// @XmlElement
// Calendar birthDay; //birthday将作为person的子元素
@XmlAttribute (name="NAME")
String name; // name将作为person的的一个属性
@XmlElement
Address address; // address将作为person的子元素
// @XmlElement
// name=“JOb”说明在xml文件元素名为“JOb”,若没有此项说明,则采用默认策略即job
// 用于控制字段或属性的序列化。
// FIELD ,JAXB 绑定类中的每个非静态、非瞬态字段将会自动绑定到 XML
// NONE, 只有使用一些 JAXB 注释专门对它们进行注释的所有字段或属性才绑定到 XML。
// PROPERTY, JAXB 绑定类中的每个获取方法/设置方法对将会自动绑定到 XML
// PUBLIC_MEMBER, 每个公共获取方法/设置方法对和每个公共字段将会自动绑定到 XML
// 包上的 @XmlAccessorType 注释可应用于包中的所有类
@XmlType(propOrder = ... {"job","address"} )
@XmlRootElement
// 表示person是一个根元素
class Person ... {
// @XmlElement
// Calendar birthDay; //birthday将作为person的子元素
@XmlAttribute (name="NAME")
String name; // name将作为person的的一个属性
@XmlElement
Address address; // address将作为person的子元素
// @XmlElement
// name=“JOb”说明在xml文件元素名为“JOb”,若没有此项说明,则采用默认策略即job
@XmlElement(name="JOb")
String job; // job将作为person的子元素
public Person(){
}
public String getJob() ...{
return job;
}
public void setJob(String job) ...{
this.job = job;
}
public String getName() ...{
return name;
}
public void setName(String name) ...{
this.name = name;
}
public void setAddress(Address address) ...{
this.address = address;
}
public Address getAddress() ...{
return address;
}
}
@XmlAccessorType(XmlAccessType.FIELD)
class Address ... {
String job; // job将作为person的子元素
public Person(){
}
public String getJob() ...{
return job;
}
public void setJob(String job) ...{
this.job = job;
}
public String getName() ...{
return name;
}
public void setName(String name) ...{
this.name = name;
}
public void setAddress(Address address) ...{
this.address = address;
}
public Address getAddress() ...{
return address;
}
}
@XmlAccessorType(XmlAccessType.FIELD)
class Address ... {
//Address的属性
@XmlAttribute
String country;
@XmlAttribute
String country;
//Address的子元素即child
@XmlElement
String state;
// @XmlElement
// String city;
// @XmlElement
// String street;
// String zipcode; //由于没有添加@XmlElement,所以该元素不会出现在输出的xml中
public Address() {
}
public String getCountry() ...{
return country;
}
public String getState() ...{
return state;
}
public void setState(String state) ...{
this.state = state;
}
public void setCountry(String country) ...{
this.country = country;
}
}
@XmlElement
String state;
// @XmlElement
// String city;
// @XmlElement
// String street;
// String zipcode; //由于没有添加@XmlElement,所以该元素不会出现在输出的xml中
public Address() {
}
public String getCountry() ...{
return country;
}
public String getState() ...{
return state;
}
public void setState(String state) ...{
this.state = state;
}
public void setCountry(String country) ...{
this.country = country;
}
}
测试代码
public
class
JAXB2Tester
...
{
public static void main(String[] args) throws JAXBException, IOException ...{
JAXBContext context = JAXBContext.newInstance(Person.class);
// 下面代码演示将对象转变为xml
Marshaller m = context.createMarshaller();
m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
// Address address = new Address("China", "Beijing", "Beijing", "ShangDi
// West", "100080");
Address address = new Address();
address.setCountry("China");
address.setState("beijing");
// Person p = new Person(Calendar.getInstance(), "JAXB2", address,
// Gender.MALE, "SW");
Person p = new Person();
p.setName("zhangsan");
p.setJob("gongzuo");
p.setAddress(address);
FileWriter fw = new FileWriter("d:/person.xml");
Writer w = new StringWriter();
//输出到控制台
m.marshal(p, System.out);
//导入到文件
m.marshal(p, fw);
//导入到字符流中
m.marshal(p, w);
// 下面代码演示将上面生成的xml转换为对象
Unmarshaller um = context.createUnmarshaller();
FileReader fr = new FileReader("d:/person.xml");
//从xml文件中解析
// um.unmarshal(new File("d:/person.xml"));
//从字节流中解析
// um.unmarshal(new FileInputStream("d:/person.xml"));
//从字符流中解析
Person p2 = (Person) um.unmarshal(new StreamSource(new StringReader(w.toString())));
System.out.println("Country:" + p2.getAddress().getCountry());
}
}
public static void main(String[] args) throws JAXBException, IOException ...{
JAXBContext context = JAXBContext.newInstance(Person.class);
// 下面代码演示将对象转变为xml
Marshaller m = context.createMarshaller();
m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
// Address address = new Address("China", "Beijing", "Beijing", "ShangDi
// West", "100080");
Address address = new Address();
address.setCountry("China");
address.setState("beijing");
// Person p = new Person(Calendar.getInstance(), "JAXB2", address,
// Gender.MALE, "SW");
Person p = new Person();
p.setName("zhangsan");
p.setJob("gongzuo");
p.setAddress(address);
FileWriter fw = new FileWriter("d:/person.xml");
Writer w = new StringWriter();
//输出到控制台
m.marshal(p, System.out);
//导入到文件
m.marshal(p, fw);
//导入到字符流中
m.marshal(p, w);
// 下面代码演示将上面生成的xml转换为对象
Unmarshaller um = context.createUnmarshaller();
FileReader fr = new FileReader("d:/person.xml");
//从xml文件中解析
// um.unmarshal(new File("d:/person.xml"));
//从字节流中解析
// um.unmarshal(new FileInputStream("d:/person.xml"));
//从字符流中解析
Person p2 = (Person) um.unmarshal(new StreamSource(new StringReader(w.toString())));
System.out.println("Country:" + p2.getAddress().getCountry());
}
}
注,可以通过xsd文件生成bean类,通过如 xjc person.xsd -d d:/testdir -p com.test.jaxb 来生成bean类
其中-d 是说明输出文件的路径-p是包名 可以通过直接xjc命令来查询参数意义