1、写一个要解析的实体的类,你要解析相关字段的实体类,POJO)。
2、如果想看android中怎么获得流文件的(android中Form提交获得流文件),请看我的另外一篇笔记android中SAX解析.
3、编写解析代码:
package com.parse;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserFactory;
import com.entity.person.Person;
/**
*
* 解析XML文件
* @author Administrator
*
*/
public class Parse_XML {
//encode编码格式
public static List<Person> getXML(InputStream in,String encode){
List<Person> list = new ArrayList<Person>();
Person person=null;
//创建工厂实例来解析我们的XML文件
try {
XmlPullParserFactory pullFactory = XmlPullParserFactory.newInstance();
XmlPullParser pull = pullFactory.newPullParser();
pull.setInput(in,encode);//解析的时候不仅需要流文件还需要字符编码
int eventType = pull.getEventType();
while(eventType != XmlPullParser.END_DOCUMENT){//不是结束文档事件的时候
switch (eventType) {//根据节点事件来分别处理
case XmlPullParser.START_DOCUMENT:
break;
case XmlPullParser.START_TAG:
if("person".equals(pull.getName())){
person = new Person();
person.setId(pull.getAttributeValue(0));//pull.getAttributeName(0)获得节点的第0个属性名称
person.setClazz(pull.getAttributeValue(1));//取得第二个属性
}else if(pull.getName().equals("name")){
person.setName(pull.nextText());//获取该节点的内容
}else if(pull.getName().equals("age")){
person.setAge(pull.nextText());
}
break;
case XmlPullParser.END_TAG:
if("person".equals(pull.getName())){
list.add(person);
}
break;
case XmlPullParser.END_DOCUMENT:
break;
}
eventType = pull.next();//注意放这个的位置,每一个标签过后都要next下一个标签
}
}catch (Exception e) {
e.printStackTrace();
}
return list;
}
}