源代碼可看:https://pan.baidu.com/s/1jniElgsZ4g39ISz1Vl5U-g ,裡面有xstream.jar包
結構顯示樣式:
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();
}
}
}