天天看點

java xStream解析xml檔案

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);