pull解析与xml文件解析,都是以事件驱动的方式驱动的,通常使用switch语句,根据不同的事件类型,匹配不同的处理方式,pull解析中提供了五种事件类型:START_DOCMENT ,START_TAG, TEXT,END_TAG,END_DOCMENT,读取到xml声明时返回START_DOCMENT,结束返回END_DOCMENT,开始元素返回START_TAG ,文本返回TEXT;pull解析时返回的事件类型都是数字,需要我们自己根据返回的事件类型进行相应的操作
几个重要的方法
paser.nextText()–>返回标签中对应的文本
parser.next解析下一个标签 得到事件类型进行下一次循环
public class pullXMlParse {
public static List<Person> getXml(InputStream inputStream,String encoding) throws Exception{
List<Person> list = null;
Person person = null;
//得到xml文件解析工厂
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
//得到XML文件解析类 获取xml文件解析类的引用 通过parser.getName方法获得该节点的名称
XmlPullParser parser = factory.newPullParser();
//设置parser解析的数据来源,已经编码格式,与xml文件中编码格式一样
parser.setInput(inputStream, encoding);
//获得事件解析类型,事件类型以整形标识
int eventType = parser.getEventType();
while(eventType!=XmlPullParser.END_DOCUMENT){
switch(eventType){
case XmlPullParser.START_DOCUMENT:
list = new ArrayList<Person>();
break;
case XmlPullParser.START_TAG:
if("person".equals(parser.getName())){
person = new Person();
String s = parser.getAttributeValue(0);
int id = Integer.parseInt(s);
person.setId(id);
} else if("name".equals(parser.getName())){
String name = parser.nextText();
person.setName(name);
} else if("age".equals(parser.getName())){
String s = parser.nextText();
int age = Integer.parseInt(s);
person.setAge(age);
}
break;
case XmlPullParser.END_TAG:
if("person".equals(parser.getName())){
list.add(person);
person = null;
}
break;
}
eventType = parser.next();
}
return list;
}
}
xml文件的获取可以使用javaXML文件解析(一)HttpUtils类,Person类也可以使用javaXML文件解析(一)中的Person类