/////////////////////////////////////////////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;
}