xStream解析xml文件
xml文件如下:
<?xml version="1.0"encoding="gbk"?>
<data direct="5"cmd="4702" subcmd="2">
<event_type>2801</event_type>
<sub_type>01</sub_type>
<dev_id>XXXXXXXXXXXXXXX</dev_id>
<adminlog>
<engine_ip>1.1.1.1</engine_ip>
<event_id/>
<time/>
<user/>
<login_ip/>
<log_type/>
<description>XXXXXXXXX</description>
<operation/>
<remark/>
</adminlog>
<!--adminlog可以多个-->
</data>
对应的javaBean
public class LogReport implements Serializable {
private static final long serialVersionUID = 1L;
private String direct;
private String cmd;
private String subcmd;
private String event_type;
private String sub_type;
private String dev_id;
private List<AdminLog> adminlog = newArrayList<AdminLog>();
相应的set,get方法
}
public class AdminLog implements Serializable {
private static final long serialVersionUID = 1L;
private String engine_ip;
private String event_id;
private String time;
private String user;
private String login_ip;
private String log_type;
private String description;
private String operation;
private String remark;
对应的set,get方法
}
JavaBean转化为对应的xml:
XStreamstream = new XStream(new DomDriver());
stream.alias("data", LogReport.class);为节点起别名
stream.useAttributeFor(LogReport.class,"direct");
stream.useAttributeFor(LogReport.class,"cmd");
stream.useAttributeFor(LogReport.class,"subcmd");
//对于<data direct=””cmd=”” subcmd=””></data> 中的direct和cmd等是需要描述节点
<data>
<dsds>sdsd</dsds>
……
</data>中的<dsds>不需要描述
stream.addImplicitCollection(LogReport.class, "adminlog");隐藏节点不会让adminlog在一个大的adminlog里面已达到格式要求
stream.alias("adminlog", AdminLog.class);
String toXml = stream.toXML(lr);
Xml---javaBean同理对应相应节点调fromXml方法
XStream stream = newXStream(new DomDriver());
stream.alias("data", IDSInfoAlter.class);
stream.alias("smsaddrport", SmsAddrport.class);
stream.alias("reportevent", ReportEvent.class);
IDSInfoAlter smsData = (IDSInfoAlter) stream.fromXML(xml);