XStream常用注解 用法
@XStreamOmitField 指定该属性为一个节点
@XStreamAsAttribute 指定该属性为一个节点的一个属性
@XStreamAlias("alias") 指定该属性在xml文件中对应的节点或属性的名称为alias
@XStreamImplicit(itemFieldName="alias") 指定同一标签下多个同名元素的显示为alias
待解析的xml字串:
<user uname="evon"><utype tid="type">
<tpoint>
<ux>100</ux>
<uy>100</uy>
</tpoint>
<tpoint>
<ux>200</ux>
<uy>200</uy>
</tpoint>
</utype>
<upoint>
<ux>0</ux>
<uy>0</uy>
</upoint>
</user>
用XStream解析,节点属性及子节点均使用注解,特别注意的是:在使用注解的时候一定要在使用前开启注解解析
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.XStreamAlias; import com.thoughtworks.xstream.annotations.XStreamAsAttribute; import com.thoughtworks.xstream.annotations.XStreamImplicit; import com.thoughtworks.xstream.annotations.XStreamOmitField; import com.thoughtworks.xstream.io.xml.DomDriver; public class XmlBean { public static void main(String[] args) { User user = createUser(); XStream xStream = new XStream(new DomDriver()); xStream.autodetectAnnotations(true); 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; } } @XStreamAlias("user") class User { @XStreamOmitField @XStreamAlias("uid") private int uid; @XStreamAsAttribute @XStreamAlias("uname") private String uname; @XStreamAlias("utype") private Type type; @XStreamAlias("upoint") 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; } } @XStreamAlias("utype") class Type{ @XStreamAsAttribute @XStreamAlias("tid") private String id; @XStreamImplicit(itemFieldName="tpoint") 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; } } @XStreamAlias("upoint") class Point{ @XStreamAlias("ux") private int x; @XStreamAlias("uy") 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; } }