zoukankan      html  css  js  c++  java
  • 利用xstream处理java中的集合类

    利用xstream处理java中的集合类
             越来越发现xstream的好用了,在处理很多麻烦事情时可以很简单的搞定,比如本来需要几个字段来保存的服务器配置信息,现在只需要写一个pojo表示服务器的config information,然后利用xstream将它变为xml,用一个字段就可以保存在数据库中,方便而且高效。
             但是在工作中,发现有时候pojo中需要用到java中的集合类,如ArrayList时,稍微有那么一点麻烦,今天特总结了一下,有不对之处希望大家批评指正。
    一.pojo中使用数组
    1.先写一个表示通许录的pojo
    package chb.xml;

    /**通讯录
     * 
    @author chb
     *
     
    */

    public class AdressList {
        String username;
    //用户名
        String[] telphone;//联系方式
        public String[] getTelphone() {
            
    return telphone;
        }

        
    public void setTelphone(String[] telphone) {
            
    this.telphone = telphone;
        }

        
    public String getUsername() {
            
    return username;
        }

        
    public void setUsername(String username) {
            
    this.username = username;
        }

    }
    2.利用xstream将一个AdressList对象转化成xml
            XStream xstream = new XStream(new DomDriver());
            AdressList adressList
    =new AdressList();
            adressList.setUsername(
    "chb");
            String[] tel
    ={"13811071xxx","0391-6792xxx"};
            adressList.setTelphone(tel);
            String obj_xml
    =xstream.toXML(adressList);
            System.out.println(obj_xml);
    3.输出结果为:
    <chb.xml.AdressList>
      
    <username>chb</username>
      
    <telphone>
        
    <string>13811071xxx</string>
        
    <string>0391-6792xxx</string>
      
    </telphone>
    </chb.xml.AdressList>
    4.如果觉得上面这段xml的root节点<
    chb.xml.AdressList>不爽的话,可以利用xstream的annotations来搞定。只需要改动两个地方即可:

    package chb.xml;

    import com.thoughtworks.xstream.annotations.XStreamAlias;

    /**通讯录
     * 
    @author chb
     *
     
    */

    @XStreamAlias(
    "adressList")
    public class AdressList {
        String username;
    //用户名
        String[] telphone;//联系方式
    然后在调用时更改如下:
            XStream xstream = new XStream(new DomDriver());
            Annotations.configureAliases(xstream, AdressList.
    class);
            AdressList adressList
    =new AdressList();
            adressList.setUsername(
    "chb");
            String[] tel
    ={"13811071xxx","0391-6792xxx"};
            adressList.setTelphone(tel);
            String obj_xml
    =xstream.toXML(adressList);
            System.out.println(obj_xml);
    最后输出结果为:
    <adressList>
      
    <username>chb</username>
      
    <telphone>
        
    <string>13811071xxx</string>
        
    <string>0391-6792xxx</string>
      
    </telphone>
    </adressList>
    关于xstream的
    Annotations用法可以参考:http://xstream.codehaus.org/annotations-tutorial.html
    二.pojo中使用ArrayList,ArrayList中装着另外的一个pojo
    1.创建一个pojo
    package chb.xml;

    import java.util.ArrayList;

    import com.thoughtworks.xstream.annotations.XStreamAlias;

    /**通讯录
     * 
    @author chb
     *
     
    */

    @XStreamAlias(
    "adressList")
    public class AdressList {
        String username;
    //用户名
        ArrayList<EmailAdress> emailList;//电子邮件
        public String getUsername() {
            
    return username;
        }

        
    public void setUsername(String username) {
            
    this.username = username;
        }

        
    public ArrayList<EmailAdress> getEmailList() {
            
    return emailList;
        }

        
    public void setEmailList(ArrayList<EmailAdress> emailList) {
            
    this.emailList = emailList;
        }

    }

    2.emailList变量指向的EmailAdress对象为:
    package chb.xml;

    import com.thoughtworks.xstream.annotations.XStreamAlias;

    /**有点类似于javax.mail.internet.InternetAddress
     * 
     * 如:chb <hbcui1984@163.com>
     * 
     * 
    @author chb
     *
     
    */

    @XStreamAlias(
    "email")
    public class EmailAdress {
        
        String person;
    //person
        
        String adress;
    //Adress
        
        
    public String getAdress() {
            
    return adress;
        }

        
    public void setAdress(String adress) {
            
    this.adress = adress;
        }

        
    public String getPerson() {
            
    return person;
        }

        
    public void setPerson(String person) {
            
    this.person = person;
        }

    }

    3.将一个
    AdressList对象转化为对应的pojo
            XStream xstream = new XStream(new DomDriver());
            Annotations.configureAliases(xstream, AdressList.
    class);
            Annotations.configureAliases(xstream, EmailAdress.
    class);
            AdressList adressList
    =new AdressList();
            adressList.setUsername(
    "chb");
            
            ArrayList
    <EmailAdress> emailList=new ArrayList<EmailAdress>();
            
    for(int i=1;i<4;i++){
                EmailAdress email
    =new EmailAdress();
                email.setPerson(
    "user"+i);
                email.setAdress(
    "user"+i+"@163.com");
                emailList.add(email);
            }

            adressList.setEmailList(emailList);
            String obj_xml
    =xstream.toXML(adressList);
            System.out.println(obj_xml);
    4.输出结果为:
    <adressList>
      
    <username>chb</username>
      
    <emailList>
        
    <email>
          
    <person>user1</person>
          
    <adress>user1@163.com</adress>
        
    </email>
        
    <email>
          
    <person>user2</person>
          
    <adress>user2@163.com</adress>
        
    </email>
        
    <email>
          
    <person>user3</person>
          
    <adress>user3@163.com</adress>
        
    </email>
      
    </emailList>
    </adressList>

    三.用其他集合类的方法类似,这里就不举例了。

  • 相关阅读:
    prototype.js超强的javascript类库
    MySQL Server Architecture
    Know more about RBA redo block address
    MySQL无处不在
    利用Oracle Enterprise Manager Cloud Control 12c创建DataGuard Standby
    LAMP Stack
    9i中DG remote archive可能导致Primary Database挂起
    Oracle数据库升级与补丁
    Oracle为何会发生归档日志archivelog大小远小于联机重做日志online redo log size的情况?
    Oracle Ksplice如何工作?How does Ksplice work?
  • 原文地址:https://www.cnblogs.com/hehe520/p/6330264.html
Copyright © 2011-2022 走看看