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(ファイル名Calendar.java)
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;
}
}
があるさ
上記の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が見つかりました。ここ
コード
の底部に定義されているPOJOに変換されたオブジェクトの配列が一つのオブジェクトではありません例では、以下のリンク http://x-stream.github.io/tutorial.htmlに示すように、ここで がどのように私は、全体のXMLレスポンスを投げる横切ることができるというのが私の問題であり、 JSonのような文字列に変換してからfromXML()
メソッドへの引数として渡すことができる特定のまたはすべてのカレンダーオブジェクト(XMLオブジェクト)を取得し、POJOに解析されるようにします。
文字列メソッドまたは正規表現を使用してカレンダーオブジェクトを分割するために自分自身でクラスを作成するアイデアは、単純な解析を選択するのに必要な時間と同じ時間がかかりますので、試してみることは可能かどうか、可能ですがこの方法ではありません...そしてどのように?
私もJAXBを特別に研究しましたが、スキーマが必要ですが、POJOを設計することもできますが、XML全体を解析する必要がないと、ほとんどのパーサーで問題が起こる可能性がありますレスポンス全体を解析し、そのためにPOJOの厄介な構造を要求します。私が間違っているならば、私を提案するが、いくつかの固体の例としてください...
JAXBは、XMLスキーマを必要としません。 XStreamを試したので、次の記事が役に立ちます。 JAXBとXStreamの両方を使用して、同じオブジェクトモデルを同じXMLドキュメントにマップします。http://blog.bdoughan.com/2010/10/how-does-jaxb-compare-to-xstream.html –