Pull方式解析XML文件

/////////////////////////////////////////////Xml文件///////////////////////////////////////////////////////////////////

<persons>
    <person id="23" >
<age>30</age>
        <name>lee</name>
<address>
<addr>
<area>海淀</area>
<detail>八維7棟110</detail>
</addr>
<addr>
<area>西城</area>
<detail>天安門112</detail>
</addr>
</address>
    </person>
    <person id="20"      >
        <name>leo</name>
        <age>24</age>
<address>
<addr>
<area>海淀</area>
<detail>八維7棟111</detail>
</addr>
<addr>
<area>西城</area>
<detail>天安門111</detail>
</addr>
</address>
    </person>
</persons>

//////////////////////////////////////////////////Person類//////////////////////////////////////////////////////////////

public class Person {
private int id;
private String name;
private int age;
private List<Addr> address;

}

///////////////////////////////////////////Pull解析過程/////////////////////////////////////////////////////////////////////

ListView listView=(ListView) findViewById(R.id.listView);

try {
//InputStream fis = getAssets().open("/aaa/persons3.xml");
FileInputStream fis=new FileInputStream("/mnt/sdcard/persons3.xml");

List<Person> list = XmlPullParserPerson(fis);
//給listView設置適配器
listView.setAdapter(new MyAdapter(MainActivity.this, list));

} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}


private List<Person> XmlPullParserPerson(InputStream fis) {
List<Person> list_p= new ArrayList<Person>();;


XmlPullParser parser=Xml.newPullParser();

try {
//獲得第一次解析事件碼
parser.setInput(fis, "utf-8");
int eventType = parser.getEventType();
Person p=null;
String tName="";
Addr addr=null;
List<Addr> list_addr=null;
while (eventType!= XmlPullParser.END_DOCUMENT) {
switch (eventType) {
case XmlPullParser.START_DOCUMENT:
break;


case XmlPullParser.START_TAG:
tName=parser.getName();
if(tName.equals("person")){
p=new Person();
p.setId(Integer.parseInt(parser.getAttributeValue(0)));
}else if(tName.equals("address")){
list_addr = new ArrayList<Addr>();
}else if(tName.equals("addr")){
addr=new Addr();
}
break;

case XmlPullParser.TEXT:
String date=parser.getText();
if(tName.equals("name")){
p.setName(date);
}else if(tName.equals("age")){
p.setAge(Integer.parseInt(date));
}else if(tName.equals("area")){
addr.setArea(date);
}else if(tName.equals("detail")){
addr.setDetail(date);
}
break;

case XmlPullParser.END_TAG:
tName=parser.getName();
if(tName.equals("addr")){
list_addr.add(addr);
addr=null;
}else if(tName.equals("address")){
p.setAddress(list_addr);
list_addr=null;
}else if(tName.equals("person")){
list_p.add(p);
p=null;
}
tName="";
break;
}
 
//觸發下一個事件
eventType=parser.next();
 
}

} catch (XmlPullParserException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return list_p;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章