XML 和 java对象相互转换
xml和Java对象的转换不需要任何的第三方包,JDK自带这个转换API,方便简洁。 下面使用的是JDK自带的类,没有引用任何第三方jar包。
Unmarshaller 类使客户端应用程序能够将 XML 数据转换为 Java 内容对象树。 备注:marshal(序列化、排列、整理) Marshaller 类使客户端应用程序能够将 Java 内容树转换回 XML 数据。 实体类(这个是要被包含的实体类,不需要加注解)一:
package org.ywzn.po; public class User { private String id; private String name; private String passwrod; public User() { super(); } public User(String id,String name,String passwrod) { super(); this.id = id; this.name = name; this.passwrod = passwrod; } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPasswrod() { return passwrod; } public void setPasswrod(String passwrod) { this.passwrod = passwrod; } @Override public String toString() { return "User [id=" + id + ",name=" + name + ",passwrod=" + passwrod + "]"; } } 实体类二:
package org.ywzn.po; import javax.xml.bind.annotation.XmlRootElement; @XmlRootElement public class Room { private String id; private String address; private User user; public Room() { super(); } public Room(String id,String address,User user) { super(); this.id = id; this.address = address; this.user = user; } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } public User getUser() { return user; } public void setUser(User user) { this.user = user; } @Override public String toString() { return "Room [id=" + id + ",address=" + address + ",user=" + user + "]"; } } 注意: 1、需要转换的model对象一定要添加@XmlRootElement注解,其里面的其他对象则不需要 2、需要转换的model对象一定要有不带参数的构造方法,包括该对象里面引用的对象。 测试Java对象转xml:
package org.ywzn.main; import javax.xml.bind.JAXBContext; import javax.xml.bind.JAXBException; import javax.xml.bind.Marshaller; import org.ywzn.po.Room; import org.ywzn.po.User; public class App { public static void main(String[] args) { // TODO Auto-generated method stub User user = new User("1","夏小雪","111"); Room room = new Room("1","桂林",user); try { JAXBContext context = JAXBContext.newInstance(Room.class); Marshaller createMarshaller = context.createMarshaller(); createMarshaller.marshal(room,System.out); } catch (JAXBException e) { e.printStackTrace(); } } }输出:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?><room><address>桂林</address><id>1</id><user><id>1</id><name>夏小雪</name><passwrod>111</passwrod></user></room>
package org.ywzn.main; import java.io.StringReader; import javax.xml.bind.JAXBContext; import javax.xml.bind.JAXBException; import javax.xml.bind.Unmarshaller; import org.ywzn.po.Room; public class App2 { public static void main(String[] args) { // TODO Auto-generated method stub String xmlStr = "<?xml version="1.0" encoding="UTF-8" standalone="yes"?><room><address>厦门</address><id>1</id><user><id>1</id><name>易中天</name><passwrod>111</passwrod></user></room>"; try { JAXBContext context = JAXBContext.newInstance(Room.class); Unmarshaller unmarshaller = context.createUnmarshaller(); Room room = (Room)unmarshaller.unmarshal(new StringReader(xmlStr)); System.out.println(room); } catch (JAXBException e) { e.printStackTrace(); } } }输出:
Room [id=1,address=厦门,user=User [id=1,name=易中天,passwrod=111]] 测试编码与是否省略xml头: package org.ywzn.main; import javax.xml.bind.JAXBContext; import javax.xml.bind.JAXBException; import javax.xml.bind.Marshaller; import org.ywzn.po.Room; import org.ywzn.po.User; public class Java2XMLSetEncode { public static void main(String[] args) { // TODO Auto-generated method stub User user = new User("1",user); try { JAXBContext context = JAXBContext.newInstance(Room.class); Marshaller createMarshaller = context.createMarshaller(); createMarshaller.setProperty(Marshaller.JAXB_ENCODING,"UTF-8");// 编码格式 createMarshaller .setProperty(Marshaller.JAXB_FORMATTED_OUTPUT,true);// 是否格式化生成的xml串 createMarshaller.setProperty(Marshaller.JAXB_FRAGMENT,false);// 是否省略xml头信息(<?xml createMarshaller.marshal(room,System.out); } catch (JAXBException e) { e.printStackTrace(); } } } 输出结果: <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <room> <address>桂林</address> <id>1</id> <user> <id>1</id> <name>夏小雪</name> <passwrod>111</passwrod> </user> </room>
JAXB(Java Architecture for XML Binding) 是一个业界的标准,是一项可以根据XML Schema产生Java类的技术。该过程中,JAXB也提供了将XML实例文档反向生成Java对象树的方法,并能将Java对象树的内容重新写到XML实例文档。从另一方面来讲,JAXB提供了快速而简便的方法将XML模式绑定到Java表示,从而使得Java开发者在Java应用程序中能方便地结合XML数据和处理函数。
JAXBContext 类提供到 JAXB API 的客户端入口点。它提供了管理实现 JAXB 绑定框架操作所需的 XML/Java 绑定信息的抽象,这些操作包括:解组、编组和验证。 Demo的下载地址->这里 http://download.csdn.net/detail/u014175572/8721559 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |