Java學習--xml文字轉換成Java物件
最近在做專案中用到XML,期間遇到了很多的問題,個人總結一下,歡迎指正。
XML文字以及標註。
<person> 【《一級標籤》 對應PersonBean類,而且PersonBean類用@XStreamAlias("person")修飾。】
<firstName>chen</firstName> 【《沒有子標籤,直接在PersonBean類中定義》】
<lastName>youlong</lastName>
<telphone> 【《二級標籤(內部的元素不是以列表的形式存在)》 對應PhoneNumber資料類,在定義telphone這個欄位的時有兩種方法分別是(private PhoneNumber telphone;(此變數的命名一定和xml中欄位名相同)或者@XStreamAlias("telphone") private PhoneNumber tel;(用註解的方法標註欄位名,變數名就可以隨意了))】
<code>137280</code>
<number>137280968</number>
</telphone>
<faxphone>
<code>20</code>
<number>020221327</number>
</faxphone>
<friends> 【《三級標籤(內部中的元素以列表的形式存在)》 對應Friends類。在Friends類中需要宣告一個列表,並使用@XStreamImplicit(itemFieldName="name")註解標註標籤中重複的元素 】
<name>A1</name>
<name>A2</name>
<name>A3</name>
</friends>
<pets> 【《三級標籤(含有四級標籤,並且四級標籤中的元素是以列表的形式存在)》 對應Pets類,並且在Pets類中以列表的形式宣告出Pet標籤(@XStreamImplicit(itemFieldName="pet")(此註解宣告‘pet’標籤)private List<Pet> petList;)Pet類含有pet標籤下的元素 】
<pet>
<name>doly</name>
<age>2</age>
</pet>
<pet>
<name>Ketty</name>
<age>2</age>
</pet>"+
</pets>
</person>
具體程式碼:
PersonBean類,主要宣告《person》一級標籤下的元素
import com.thoughtworks.xstream.annotations.XStreamAlias;
@XStreamAlias("person")
public class PersonBean {
private String firstName;
private String lastName;
private PhoneNumber telphone;
private PhoneNumber faxphone;
// @XStreamAlias("friends")
private Friends friends;
// @XStreamAlias("pets")
private Pets pets; //
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public PhoneNumber getTel() {
return telphone;
}
public void setTel(PhoneNumber tel) {
this.telphone = tel;
}
public PhoneNumber getFax() {
return faxphone;
}
public void setFax(PhoneNumber fax) {
this.faxphone = fax;
}
public Friends getFriend() {
return friends;
}
public void setFriend(Friends friend) {
this.friends = friend;
}
public Pets getPet() {
return pets;
}
public void setPet(Pets pet) {
this.pets = pet;
}
}
Pets類,宣告二級標籤pets下的元素
import java.util.List;
import com.thoughtworks.xstream.annotations.XStreamImplicit;
public class Pets {
@XStreamImplicit(itemFieldName="pet")
private List<Pet> petList;
public List<Pet> getAnimalList() {
return petList;
}
public void setAnimalList(List<Pet> animalList) {
this.petList = animalList;
}
}
pet類,宣告三級標籤下pet中的元素util.List;
public class Pet {
private String name;
private int age;
// public Pet() {
//
// }
// public Pet(String name,int age){
// this.name=name;
// this.age=age;
// }
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
Friends類,宣告friend二級標籤中的元素,friends標籤下的元素是以列表的形式存在的
import java.util.List;
import com.thoughtworks.xstream.annotations.XStreamImplicit;
public class Friends {
@XStreamImplicit(itemFieldName="name")
private List<String> name;
public List<String> getName() {
return name;
}
public void setName(List<String> name) {
this.name = name;
}
}
PhoneNumber 類是宣告telphone和faxphone下的元素。
public class PhoneNumber {
private int code;
private String number;
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
public String getNumber() {
return number;
}
public void setNumber(String number) {
this.number = number;
}
}
XmlUtil 類是具體的操作類
import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.xml.DomDriver;
public class XmlUtil {
/**
* java 轉換成xml
* @Title: toXml
* @Description: TODO
* @param obj 物件例項
* @return String xml字串
*/
public static String toXml(Object obj) {
XStream xstream=new XStream();
// XStream xstream=new XStream(new DomDriver()); //直接用jaxp dom來解釋
// XStream xstream=new XStream(new DomDriver("utf-8")); //指定編碼解析器,直接用jaxp dom來解釋
////如果沒有這句,xml中的根元素會是<包.類名>;或者說:註解根本就沒生效,所以的元素名就是類的屬性
xstream.processAnnotations(obj.getClass()); //通過註解方式的,一定要有這句話
return xstream.toXML(obj);
}
/**
* 將傳入xml文字轉換成Java物件
* @Title: toBean
* @Description: TODO
* @param xmlStr
* @param cls xml對應的class類
* @return T xml對應的class類的例項物件
*
* 呼叫的方法例項:PersonBean person=XmlUtil.toBean(xmlStr, PersonBean.class);
*/
@SuppressWarnings("unchecked")
public static <T> T toBean(String xmlStr,Class<T> cls){
//注意:不是new Xstream(); 否則報錯:java.lang.NoClassDefFoundError: org/xmlpull/v1/XmlPullParserFactory
XStream xstream=new XStream(new DomDriver());
xstream.processAnnotations(cls);
T obj=(T)xstream.fromXML(xmlStr);
return obj;
}
public static void main(String[] args) {
String xmlStr="<person>"+
"<firstName>chen</firstName>"+
"<lastName>youlong</lastName>"+
"<telphone>"+
"<code>137280</code>"+
"<number>137280968</number>"+
"</telphone>"+
"<faxphone>"+
"<code>20</code>"+
"<number>020221327</number>"+
"</faxphone>"+
"<friends>"+
"<name>A1</name>"+
"<name>A2</name>"+
"<name>A3</name>"+
"</friends>"+
"<pets>"+
"<pet>"+
"<name>doly</name>"+
"<age>2</age>"+
"</pet>"+
"<pet>"+
"<name>hahah</name>"+
"<age>3</age>"+
"</pet>"+
"</pets>"+
"</person>";
//用泛型的知識
System.out.println("xmlStr: \n" + xmlStr);
System.out.println();
PersonBean person=XmlUtil.toBean(xmlStr, PersonBean.class);
System.out.println("person=firstname=="+person.getFirstName());
System.out.println("person==Friends==name1=="+person.getFriend().getName());
System.out.println("person==Pets==name2=="+person.getPet().getAnimalList().get(1).getName());
}
}
相關文章
- java 物件與xml相互轉換Java物件XML
- Java物件轉換成MapJava物件
- Java如何將Object轉換成指定Class物件JavaObject物件
- 將soap報文(或xml)轉換成物件XML物件
- java 實現文字格式轉換Java
- java util date轉換成java sql dateJavaSQL
- simplexml_load_string 將xml轉換成物件XML物件
- java基礎學習之--XMLJavaXML
- mapstruct解放Java物件轉換StructJava物件
- Java基礎之IO轉換流學習Java
- Java 學習:物件和類Java物件
- java json字串轉換為物件,轉換為listJavaJSON字串物件
- 把Java生成的RSA公鑰、私鑰轉換成.NET使用的XML格式JavaXML
- java物件與json物件間的相互轉換Java物件JSON
- Java學習--Java 中基本型別和字串之間的轉換Java型別字串
- Maven 學習筆記——將普通的Java專案轉換成Maven專案(3)Maven筆記Java
- 初學java進位制轉換方面補充學習Java
- JAVA中 XML與資料庫互轉 學習筆記三JavaXML資料庫筆記
- |轉| java學習之路Java
- java學習方向〔轉〕Java
- 學習 XSLT:XML文件轉換的關鍵XML
- jxcel - 好用的Excel與Java物件轉換工具ExcelJava物件
- Java學習--jsp內建物件JavaJS物件
- 把字串轉換成整數(Java實現)字串Java
- 用Java實現samza轉換成flinkJava
- PHP 物件轉換成陣列PHP物件陣列
- Word將文字轉換成表格技巧
- Word文件批次轉換成TXT文字
- Java中將XML轉換為PDF的兩種辦法JavaXML
- Java 將HTML轉為XMLJavaHTMLXML
- java基本型別和物件之間的轉換Java型別物件
- XML 程式設計思想: 學習物件後設資料(轉)XML程式設計物件
- java 宣告物件(轉)Java物件
- java學習——物件導向之繼承Java物件繼承
- Java學習-jsp內建物件SessionJavaJS物件Session
- Java學習筆記之類和物件Java筆記物件
- 資料庫表格轉換成XML格式方法!資料庫XML
- Java零基礎學習之路(八)Java物件導向Java物件