天天看點

xstream轉換xml和Java對象

源代碼可看:https://pan.baidu.com/s/1jniElgsZ4g39ISz1Vl5U-g ,裡面有xstream.jar包

結構顯示樣式:

xstream轉換xml和Java對象

ItemInterface類:

public class ItemInterface {

    private String Sender = "";
    private String Receiver = "";
    private String Billtype = "";
    private Vector<Item> Items = new Vector<>();
    
    public ItemInterface( Vector<Item> Items ){
        this.Items = Items;
    }

   get.....

   set....

}
           

Item類:

public class Item {

    private String CHILD_ID = "";
    private String REV_ID = "";
    private String CHILD_NAME = "";
    private String MATERIAL = "";
    private ItemForm ITEM_FORM = null;
    
    public Item (String CHILD_ID,String REV_ID,String CHILD_NAME,String MATERIAL,ItemForm ITEM_FORM){
        this.CHILD_ID = CHILD_ID;
        this.REV_ID = REV_ID;
        this.CHILD_NAME = CHILD_NAME;
        this.MATERIAL = MATERIAL;
        this.ITEM_FORM = ITEM_FORM;
    }

   get.....

   set....

}
           

ItemForm類:

public class ItemForm {

    private String OWNER_USER = "";
    private String OWNER_GROUP = "";
    private String UNIT = "";
    
    public ItemForm(String OWNER_USER,String OWNER_GROUP,String UNIT){
        this.OWNER_USER = OWNER_USER;
        this.OWNER_GROUP = OWNER_GROUP;
        this.UNIT = UNIT;
    }

   get.....

   set....

}
           

xstream序列轉換:

public class Serialize {

    private static String xmlHead = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
    
    /**
     * <p>Description: 将ItemInterface對象序列化為XML資訊并生成XML檔案</p>
     * */
    public static void serializeItemsToXMLFile(ItemInterface iteminterface , String xmlpath) throws Exception{
        //1.XmlFriendlyNameCoder當類中名稱有單下劃線的時候,轉成XML時候會變成雙下劃線,如BOM對象中的CHILD_ID,則轉換成XML标簽時候則為CHILD__ID
        //解決單下劃線變雙下劃線的方法就是使用XmlFriendlyNameCoder,如XmlFriendlyNameCoder("-_", "_")
        XStream iteminterfaceXS = new XStream(new DomDriver("UTF-8",new XmlFriendlyNameCoder("-_","_")));
        //2.對自定義的類名或者變量名建立别名以對應生成的XML元素名稱更加簡潔(可選)
        //如Item.class不定義,則标簽為<包名.Item>,如果定義别名為ITEM,則标簽顯示為<ITEM>
        iteminterfaceXS.alias("Interface", ItemInterface.class);
        iteminterfaceXS.alias("ITEM", Item.class);
        //3.自定義标簽,如将ItemInterface中Vector<Item> Items的Item中ITEMFORM的 ITEM_FORM的标簽改為<FORM>
        //iteminterfaceXS.aliasField("FORM", Item.class, "ITEM_FORM");
        
      //4.useAttributeFor為标簽定義屬性,如為TTEMS對應标簽Interface标簽定義屬性Sender,則标簽顯示為<Interface Sender="">
        iteminterfaceXS.useAttributeFor(ItemInterface.class, "Sender");
        iteminterfaceXS.useAttributeFor(ItemInterface.class, "Receiver");
        iteminterfaceXS.useAttributeFor(ItemInterface.class, "Billtype");
        //5.addImplicitCollection該方法的作用是引入隐含集合(Implicit Collection),即某個類包含集合(Vector等)字段,
        //引入隐含集合方法可以在生成的XML中并不顯示集合字段的标簽。
        //如想将類中Items Vecotr對應的标簽隐藏掉(隐掉的效果是<Interface><ITEM>否則将顯示<Interface><Items><ITEM>)
        iteminterfaceXS.addImplicitCollection(ItemInterface.class, "Items");
        //6.toXML(Object obj, Writer out)将對象以XML内容形式寫入檔案中,生成XML檔案
        PrintWriter writer = new PrintWriter(xmlpath,"UTF-8");
        writer.write(xmlHead);
        iteminterfaceXS.toXML(iteminterface, writer);
        writer.flush();
        writer.close();
    }
    /**
     * <p>Description: 将ITEMInterface對象序列化為XML字元串</p>
     * */
    public static String serializeItemsToXMLStr(ItemInterface iteminterface){
        XStream iteminterfaceXS = new XStream(new DomDriver("UTF-8",new XmlFriendlyNameCoder("-_","_")));
        iteminterfaceXS.alias("Interface", ItemInterface.class);
        iteminterfaceXS.alias("ITEM", Item.class);
        iteminterfaceXS.aliasField("ITEM_FORM", Item.class, "FORM");
        iteminterfaceXS.useAttributeFor(ItemInterface.class, "Sender");
        iteminterfaceXS.useAttributeFor(ItemInterface.class, "Receiver");
        iteminterfaceXS.useAttributeFor(ItemInterface.class, "Billtype");
        iteminterfaceXS.addImplicitCollection(ItemInterface.class, "Items");
        return xmlHead+iteminterfaceXS.toXML(iteminterface);
    }
    /**
     * <p>Description: 将包含ITEM資訊的XML檔案反序列化為ItemInterface對象</p>
     * */
    public static ItemInterface unserializeXMLFileToItems(String xmlpath){
        XStream iteminterfaceXS = new XStream(new DomDriver("UTF-8",new XmlFriendlyNameCoder("-_","_")));
        iteminterfaceXS.alias("Interface", ItemInterface.class);
        iteminterfaceXS.alias("ITEM", Item.class);
        iteminterfaceXS.aliasField("ITEM_FORM", Item.class, "FORM");
        iteminterfaceXS.useAttributeFor(ItemInterface.class, "Sender");
        iteminterfaceXS.useAttributeFor(ItemInterface.class, "Receiver");
        iteminterfaceXS.useAttributeFor(ItemInterface.class, "Billtype");
        iteminterfaceXS.addImplicitCollection(ItemInterface.class, "Items");
        ItemInterface iteminterface = (ItemInterface) iteminterfaceXS.fromXML(new File(xmlpath));
        return iteminterface;
    }
    /**
     * <p>Description: 将包含ITEM資訊的XML字元串反序列化為ItemInterface對象</p>
     * */
    public static ItemInterface unserializeXMLStrToItems(String xmlstr){
        XStream iteminterfaceXS = new XStream(new DomDriver("UTF-8",new XmlFriendlyNameCoder("-_","_")));
        iteminterfaceXS.alias("Interface", ItemInterface.class);
        iteminterfaceXS.alias("ITEM", Item.class);
        iteminterfaceXS.aliasField("ITEM_FORM", Item.class, "FORM");
        iteminterfaceXS.useAttributeFor(ItemInterface.class, "Sender");
        iteminterfaceXS.useAttributeFor(ItemInterface.class, "Receiver");
        iteminterfaceXS.useAttributeFor(ItemInterface.class, "Billtype");
        iteminterfaceXS.addImplicitCollection(ItemInterface.class, "Items");
        ItemInterface iteminterface = (ItemInterface) iteminterfaceXS.fromXML(xmlstr);
        return iteminterface;
    }

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        try {
            Item item1 = new Item("000000001","A","工藝","鋼",new ItemForm("liuxz","dba","個"));
            Item item2 = new Item("000000002","A","文檔","紙質",new ItemForm("liuxz","dba","張"));
            Vector<Item> items = new Vector<>();
            items.add(item1);
            items.add(item2);
            ItemInterface iteminterface = new ItemInterface(items);
            Serialize.serializeItemsToXMLFile(iteminterface, "C:/ITEM.XML");
            
            System.out.println(Serialize.serializeItemsToXMLStr(iteminterface));
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

}