Pull方式解析XML文件

来源:互联网 发布:讲解spring源码的书籍 编辑:程序博客网 时间:2024/05/22 11:36

/////////////////////////////////////////////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;
}
0 0
原创粉丝点击