xml和bean间相互转换
最近学习了xml和java bean对象间的相互转换,感觉可以和大家分享一下,也希望和大家以后多多交流: 需要引用的包:xstream-1.3.1.jar 主要应用XStream的fromXML()和toXML()方法来实现xml和bean间的相互转换,后面附有源码,下面问题都通过讨论源码展开 碰到的问题1: Exception in thread "main" java.lang.IllegalArgumentException: XPP3 pull parser library not present. Specify another driver. For example: new XStream(new DomDriver()) 解决办法: XStream对象初始化时,调用构造方法XStream(HierarchicalStreamDriver hierarchicalStreamDriver),具体用法如下: XStream xStream = new XStream(new DomDriver()); 碰到的问题2: xml节点名称出现包名,具体内容如下: <org.evon.example.User> 解决办法: 调用XStream对象的alias方法,具体使用方法如下: xStream.alias("user",User.class); 碰到的问题3:同一标签下多个同名元素的显示 解决办法: 方法1:调用addImplicitCollection方法,具体使用如下 xStream.addImplicitCollection(Type.class,"pointList"); 方法2:使用注解,需要进行两步操作,具体使用如下 1)Type类pointList属性声明前加上注解@XStreamImplicit(itemFieldName="point") @XStreamImplicit(itemFieldName="point") 2)解析前开启注解解析 xStream.autodetectAnnotations(true);
源码如下: package org.evon.example; import java.util.ArrayList; import java.util.List; import com.thoughtworks.xstream.XStream; import com.thoughtworks.xstream.annotations.XStreamImplicit; import com.thoughtworks.xstream.io.xml.DomDriver; public class XmlJava { public static void main(String[] args) { User user = createUser(); XStream xStream = new XStream(new DomDriver()); xStream.addImplicitCollection(Type.class,"pointList"); // xStream.autodetectAnnotations(true); xStream.alias("user",User.class); xStream.alias("type",Type.class); xStream.alias("point",Point.class); String xml = xStream.toXML(user); System.out.println("bean转换成的xml:"); System.out.println(xml); User newUser = (User)xStream.fromXML(xml); System.out.println("xml转换成的bean,bean重新转换成的xml:"); System.out.println(xStream.toXML(newUser)); } private static User createUser(){ Type type = new Type(); type.setId("type"); List<Point> pointList = new ArrayList<Point>(); Point point1 = new Point(); point1.setX(100); point1.setY(100); Point point2 = new Point(); point2.setX(200); point2.setY(200); pointList.add(point1); pointList.add(point2); type.setPointList(pointList); Point point = new Point(); point.setX(0); point.setY(0); User user = new User(); user.setUid(8888); user.setUname("evon"); user.setType(type); user.setPoint(point); return user; } } class User { private int uid; private String uname; private Type type; private Point point; public int getUid() { return uid; } public void setUid(int uid) { this.uid = uid; } public String getUname() { return uname; } public void setUname(String uname) { this.uname = uname; } public Type getType() { return type; } public void setType(Type type) { this.type = type; } public Point getPoint() { return point; } public void setPoint(Point point) { this.point = point; } } class Type{ private String id; // @XStreamImplicit(itemFieldName="point") private List<Point> pointList; public String getId() { return id; } public void setId(String id) { this.id = id; } public List<Point> getPointList() { return pointList; } public void setPointList(List<Point> pointList) { this.pointList = pointList; } } class Point{ private int x; private int y; public int getX() { return x; } public void setX(int x) { this.x = x; } public int getY() { return y; } public void setY(int y) { this.y = y; } } 由于本人所学有限,有的地方论述不尽详细;若有问题,欢迎大家指正,QQ:823746747 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |