Pull解析:
Reader和input stream的区别在于是否支持中文。
循环结束的条件是:获得的event type等于文档结束事件类型
是document解析和sax解析的一个组合。
编程要形成自己的思路,默写代码
package com.pull;
import java.io.FileInputStream;
import java.util.ArrayList;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserFactory;
import com.sax.Person;
public class PullParserTest {
static ArrayList<Person> list = null;
static Person p = null;
public static void main(String[] args) {
try {
// 创建解析工厂
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
// 根据工厂创建解析器
XmlPullParser parser = factory.newPullParser();
// 解析xml文件
parser.setInput(new FileInputStream("src/com/sax/Person.xml"),
"UTF-8");
// 解析文件
parser.next();// 找到第一个触发事件并一直往后走
// 获取事件类型
int eventType = parser.getEventType();
// 只要不是读到文档结束,循环一直执行
while (eventType != XmlPullParser.END_DOCUMENT) {
// 如果当前事件类型是一个标签开始事件
if (eventType == XmlPullParser.START_TAG) {
if ("persons".equals(parser.getName())) {
list = new ArrayList<Person>();
} else if ("person".equals(parser.getName())) {
p = new Person();
String idValue = parser.getAttributeValue(0);
p.setId(Integer.parseInt(idValue));
} else if ("name".equals(parser.getName())) {
String nameValue = parser.nextText();
p.setName(nameValue);
} else if ("age".equals(parser.getName())) {
String ageValue = parser.nextText();
p.setAge(Integer.parseInt(ageValue));
}
}else if(eventType==XmlPullParser.END_TAG){
if("person".equals(parser.getName())){
list.add(p);
}
}
//找下一个事件
parser.next();
//重新获取事件类型
eventType=parser.getEventType();
}
for(Person person:list){
System.out.println("id="+person.getId()+" ");
System.out.println("age="+person.getAge()+" ");
System.out.println("name="+person.getName()+" ");
System.out.println("*********************");
}
} catch (Exception e) {
}
}
}