XStream(可把Javabean轉換成XMl的小工具)
阿新 • • 發佈:2018-11-19
XStream 1、作用 把JavaBean轉換為(序列化)xml 2、XStream的jar包 核心JAR包:xstream-1.4.x.jar 必須依賴包:xpp3_min-1.1.4c(XML Pull Parser速度很快的XML解析器) 3、使用步驟 XStream xstream = new XStream(); String xmlStr = xstream.toXML(javabean); 4、使用細節 別名:把型別對應的元素名修改 xstream.alias("china",List.class);讓List型別生成的元素名為china xstream.alias("province",Province.class):讓Province類生成的元素名為province 使用為屬性:預設類的成員,生成的是元素的子元素。希望讓類的成員生成元素的屬性 xstream.useAttributeFor(Province.class,"name"):把Province類的名為name成員,生成<province>元素的name屬性 去除集合Collection型別的成員:只需要Collection的內容,而不希望Collection本身也生成一個元素 xstream.addImplicitCollection(Province.class,"cities"):讓Province類的名為cities(是List型別的,內容還會生成元素)的成員不生成元素 去除類的指定成員,讓其不生成xml元素 xstream.omitField(City.class,"description"):在生成的xml中不會出現City類的。名為description的對應的元素 用到的jar xpp3_min-1.1.3.4.O.jar xstream-1.4.7.jar
public class Demo1 { public List<Province> getProvinceList(){ Province p1 = new Province(); p1.setName("山東"); p1.addCity(new City("青島","qingdao")); p1.addCity(new City("濟南","jinan")); Province p2 = new Province(); p2.setName("湖北"); p2.addCity(new City("隨州","suizhou")); p2.addCity(new City("武漢 "," wuhan")); List<Province> provinceList = new ArrayList<Province>(); provinceList.add(p1); provinceList.add(p2); return provinceList; } /* fun() 輸出結果: <list> --> List型別顯示為list <com.lingnet.demo.Province> -->javabean型別為Province,元素的名稱為類的完整名 <name>山東</name> -->javabean的屬性名 <cities> -->javabean的屬性名 <com.lingnet.demo.City> -->類名 <name>青島</name> -->屬性名 <description>qingdao</description> -->屬性名 </com.lingnet.demo.City> <com.lingnet.demo.City> <name>濟南</name> <description>jinan</description> </com.lingnet.demo.City> </cities> </com.lingnet.demo.Province> <com.lingnet.demo.Province> <name>湖北</name> <cities> <com.lingnet.demo.City> <name>隨州</name> <description>suizhou</description> </com.lingnet.demo.City> <com.lingnet.demo.City> <name>武漢 </name> <description> wuhan</description> </com.lingnet.demo.City> </cities> </com.lingnet.demo.Province> </list> */ // @Test public void fun(){ List<Province> proList = getProvinceList(); /* * 建立XStream物件 * 呼叫toXML把集合轉換成xml字串 */ XStream xStream = new XStream(); String s = xStream.toXML(proList); System.out.println(s); } /* * 別名(alias) * 希望: * 預設List型別對應<list>元素,希望讓List型別對應<china>元素 * 預設Province型別對應<my.demo.Province>希望讓它對應<province> * 預設city型別對應<my.demo.City>希望它對應<city>元素 */ /* <china> <province> <name>山東</name> <cities> <city> <name>青島</name> <description>qingdao</description> </city> <city> <name>濟南</name> <description>jinan</description> </city> </cities> </province> <province> <name>湖北</name> <cities> <city> <name>隨州</name> <description>suizhou</description> </city> <city> <name>武漢 </name> <description> wuhan</description> </city> </cities> </province> </china> */ // @Test public void fun2(){ List<Province> proList = getProvinceList(); XStream xstream = new XStream(); /* * 給指定的型別指定別名 */ xstream.alias("china",List.class);//給list型別指定別名china xstream.alias("province", Province.class);//給Province指定別名 xstream.alias("city", City.class);//給City型別指定別名為city String s = xstream.toXML(proList); System.out.println(s); } // 預設javabean的屬性都會生成子元素,而現在希望生成元素的屬性 /* <china> <province name="山東"> <cities> <city> <name>青島</name> <description>qingdao</description> </city> <city> <name>濟南</name> <description>jinan</description> </city> </cities> </province> <province name="湖北"> <cities> <city> <name>隨州</name> <description>suizhou</description> </city> <city> <name>武漢 </name> <description> wuhan</description> </city> </cities> </province> </china> */ // @Test public void fun3(){ List<Province> proList = getProvinceList(); XStream xstream = new XStream(); xstream.alias("china",List.class);//給list型別指定別名china xstream.alias("province", Province.class);//給Province指定別名 xstream.alias("city", City.class);//給City型別指定別名為city /* * 把Province類的name屬性,生成<province>元素的屬性 */ xstream.useAttributeFor(Province.class,"name"); String s = xstream.toXML(proList); System.out.println(s); } // 去除List型別的屬性,只把List中的元素生成xml元素 /* <china> <province name="山東"> <city> <name>青島</name> <description>qingdao</description> </city> <city> <name>濟南</name> <description>jinan</description> </city> </province> <province name="湖北"> <city> <name>隨州</name> <description>suizhou</description> </city> <city> <name>武漢 </name> <description> wuhan</description> </city> </province> </china> */ // @Test public void fun4(){ List<Province> proList = getProvinceList(); XStream xstream = new XStream(); xstream.alias("china",List.class);//給list型別指定別名china xstream.alias("province", Province.class);//給Province指定別名 xstream.alias("city", City.class);//給City型別指定別名為city xstream.useAttributeFor(Province.class,"name");//把Province類的name屬性,生成<province>元素的屬性 /* * 去除<cities>這樣的Collection型別的屬性 * 取出Province類的名為cities的List型別的屬性 */ xstream.addImplicitCollection(Province.class, "cities"); String s = xstream.toXML(proList); System.out.println(s); } // 去除不想要的javabean屬性, 就是讓某些javabean屬性,不生成對應的xml元素 /* <china> <province name="山東"> <city> <name>青島</name> </city> <city> <name>濟南</name> </city> </province> <province name="湖北"> <city> <name>隨州</name> </city> <city> <name>武漢 </name> </city> </province> </china> */ @Test public void fun5(){ List<Province> proList = getProvinceList(); XStream xstream = new XStream(); xstream.alias("china",List.class);//給list型別指定別名china xstream.alias("province", Province.class);//給Province指定別名 xstream.alias("city", City.class);//給City型別指定別名為city xstream.useAttributeFor(Province.class,"name");//把Province類的name屬性,生成<province>元素的屬性 xstream.addImplicitCollection(Province.class, "cities");//去除Province類的名為cities的List型別的屬性 /* * 讓City類的,名為description屬性不生成對應的xml元素 */ xstream.omitField(City.class, "description"); String s = xstream.toXML(proList); System.out.println(s); } }
public class City { private String name; private String description; public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } public City(String name, String description) { super(); this.name = name; this.description = description; } public City(String name) { super(); this.name = name; } public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public String toString() { return "City [name=" + name + ", description=" + description + "]"; } public City() { super(); // TODO Auto-generated constructor stub } }
public class Province {
private String name;
private List<City> cities = new ArrayList<City>();
public Province() {
super();
// TODO Auto-generated constructor stub
}
@Override
public String toString() {
return "Province [name=" + name + ", cities=" + cities + "]";
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<City> getCities() {
return cities;
}
public void setCities(List<City> cities) {
this.cities = cities;
}
public Province(String name, List<City> cities) {
super();
this.name = name;
this.cities = cities;
}
public void addCity(City city){
cities.add(city);
}
}