xml<-->bean之间互转

来源:互联网 发布:linux vps python 编辑:程序博客网 时间:2024/05/02 00:37

1.JAXB可以实现xml和java bean之间的互转,非常之简便,而且jdk5之后已经自带了jaxb包了。

2.首先定义几个bean,里面的属性和类采用xml的注解

School.java:

package com.zjapl;
import java.util.List;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlElementWrapper;
public class School {
private String s_name;
private String s_addr;
private List<User> users;
@XmlElement(name="s_name")
public String getS_name() {
return s_name;
}
public void setS_name(String s_name) {
this.s_name = s_name;
}
@XmlElement(name="s_addr")
public String getS_addr() {
return s_addr;
}
public void setS_addr(String s_addr) {
this.s_addr = s_addr;
}
@XmlElementWrapper(name="users")
@XmlElement(name="user")
public List<User> getUsers() {
return users;
}
public void setUsers(List<User> users) {
this.users = users;
}
}

User.java:

package com.zjapl;
import javax.xml.bind.annotation.XmlElement;
public class User {
private String userId;
private String userName;
@XmlElement
public String getUserId() {
return userId;
}
public void setUserId(String userId) {
this.userId = userId;
}
@XmlElement
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
}

Test.java:

package com.zjapl;
import java.util.List;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlElementWrapper;
import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement(name="test")
public class Test5 {
private List<School> schools;

@XmlElementWrapper(name="schools")
@XmlElement(name="school")
public List<School> getSchools() {
return schools;
}

public void setSchools(List<School> schools) {
this.schools = schools;
}
}

注:@XmlRootElement:表示是一个根元素;@XmlElement表示元素节点;@XmlElementWrapper可在元素节点外面再包一层节点,

一般定义在List里;如果没有name属性,则用默认的属性名当做生成的xml节点名称。

3.bean->xml

public static String bean2Xml(Object obj) throws JAXBException{
JAXBContext context = JAXBContext.newInstance(obj.getClass());
Marshaller m = context.createMarshaller();
StringWriter sw = new StringWriter();
m.marshal(obj, sw);
return sw.toString();
}


xml-<bean

public static Test5 xml2bean(String xml) throws JAXBException{
Test5 test = new Test5();
JAXBContext context = JAXBContext.newInstance(test.getClass());
Unmarshaller um = context.createUnmarshaller();
StringReader sr = new StringReader(xml);
test = (Test5)um.unmarshal(sr);
return test;
}


main方法:

public static void main(String[] args) throws JAXBException {
Test5 test = new Test5();
List<School> schools = new ArrayList<School>();
School sc1 = new School();
User user1 = new User();
user1.setUserName("user1");
user1.setUserId("userid1");
User user2 = new User();
user2.setUserName("user2");
user2.setUserId("userid2");
sc1.setS_name("sc_name1");
sc1.setS_addr("sc_addr1");
List<User> users = new ArrayList<User>();
users.add(user1);
users.add(user2);
sc1.setUsers(users);

School sc2 = new School();
User user3 = new User();
user3.setUserName("user3");
user3.setUserId("userid3");
sc1.setS_name("sc_name2");
sc1.setS_addr("sc_addr2");
List<User> users2 = new ArrayList<User>();
users2.add(user3);
sc2.setUsers(users2);

schools.add(sc1);
schools.add(sc2);


test.setSchools(schools);

String xml = bean2Xml(test);
System.out.println(xml);

Test5 ts = xml2bean(xml);
System.out.println(ts.getSchools());

}

4.生成的结果:



0 0
原创粉丝点击