我是XML解析的新手,並且想要將由Web服務產生的XML文件轉換爲POJO列表。因爲我已經和JSon做了一些工作,發現它很容易處理。而在XML的情況下有一個安靜的同樣的過程,但我無法找到穿越層次結構併到達特定節點以解析POJO的方式。正如我用例子來解釋我的問題。這裏是響應XML格式獲取可以使用XStream解析的XML的特定對象
<hash>
<resp_status>1</resp_status>
<message>success</message>
<errors></errors>
<calendars>
<calendar>
<id>44</id>
<name>Air Force</name>
<expiry_date>2012-03-01</expiry_date>
<thumbnail_url>http://www.countdownyourgame.com/uploads/44_thumbnail.png</thumbnail_url>
</calendar>
<calendar>
<id>103</id>
<name>Akron</name>
<expiry_date>2012-02-01</expiry_date>
<thumbnail_url>http://www.countdownyourgame.com/uploads/103_thumbnail.png</thumbnail_url>
</calendar>
<calendar>
<id>16</id>
<name>Alabama</name>
<expiry_date>2012-03-01</expiry_date>
<thumbnail_url>http://www.countdownyourgame.com/uploads/16_thumbnail.png</thumbnail_url>
</calendar>
</calendars>
和JSON格式相同的反應
{
"hash":
{
"resp_status":"1",
"message":"success",
"errors":"",
"calendars":
{
"calendar":[
{
"id":"44",
"name":"Air Force",
"expiry_date":"2012-03-01",
"thumbnail_url":"http://www.countdownyourgame.com/uploads/44_thumbnail.png"
},
{
"id":"103",
"name":"Akron",
"expiry_date":"2012-02-01",
"thumbnail_url":"http://www.countdownyourgame.com/uploads/103_thumbnail.png"
},
{
"id":"16",
"name":"Alabama",
"expiry_date":"2012-03-01",
"thumbnail_url":"http://www.countdownyourgame.com/uploads/16_thumbnail.png"
}
]
}
}
}
這裏是POJO的
public class Calendar {
private String id, name, expiry_date, thumbnail_url;
Calendar() {
id = new String("");
name = new String("");
expiry_date = new String("");
thumbnail_url = new String("");
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getExpiryDate() {
return expiry_date;
}
public void setExpiryDate(String expiry_date) {
this.expiry_date = expiry_date;
}
public String getThumbnailUrl() {
return thumbnail_url;
}
public void setThumbnailUrl(String name) {
this.thumbnail_url = name;
}
}
內部包含日曆(文件名Calendar.java)日曆對象
轉換上述JSon迴應我只需要下面的代碼
JSONObject json=new JSONObject(JsonResponceString);
for(int i=0;i<json.getJSONObject("hash").getJSONObject("calendars").getJSONArray("calendar").length();i++)
{
//by using refrenced jar of Gson
Calendars obj=new Gson().fromJson(json.getJSONObject("hash").getJSONObject("calendars").getJSONArray("calendar").getJSONObject(i).toString(), Calendar.class);
//ArrayList for calendar type objects
calendarList.add(obj);
}
上面的過程用XML有很多解析器,但是我發現XStream是一個簡單的解析器。 這裏如圖下面的鏈接http://x-stream.github.io/tutorial.html在示例中,存在一個對象不將其轉化爲POJO對象的陣列中的代碼
這裏底部部分限定是我的問題,我怎樣可以遍歷扔整個XML響應,並獲取可以轉換爲字符串的特定或所有日曆對象(XML對象),然後將其作爲參數傳遞給fromXML()
方法,以便解析爲POJO。
我自己寫一個類來使用字符串方法或正則表達式來拆分日曆對象的任何想法將需要相同的時間來選擇簡單的解析所以請幫助我通過一個乾淨的答案,我的過程我'嘗試是否可能,可能但不是這樣...然後以什麼方式?
我還研究了其他人特別是JAXB,但它需要架構,儘管它甚至可以爲您設計POJO,但如果我不需要整個XML來解析問題,我所擁有的大多數解析器都是可能的來解析整個響應,並因此要求POJO的這種混亂的結構。如果我錯了,請建議我,但有一些堅實的例子... thankx
JAXB不需要XML架構。既然你已經嘗試過XStream,下面的文章可能會有用。它使用JAXB和XStream將相同的對象模型映射到相同的XML文檔:http://blog.bdoughan.com/2010/10/how-does-jaxb-compare-to-xstream.html –