xmlpull解析也是跟sax解析一樣,都是邊解析邊釋放,所以不會像dom解析那樣出現出現溢出。
他的實現代碼如下:
package itcast.cn;
import java.io.FileInputStream;
import java.util.ArrayList;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import org.xmlpull.v1.XmlPullParserFactory;
//把兩個person封裝到集合裏面
//則需要有兩個對象,然後把數據放在對象裏面,之後把對象放在集合裏面
public class Pull {
public static void main(String[] args) throws Exception {
//必須要導入家暴--由於是第三方的,所以要導入
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
XmlPullParser pullParser = factory.newPullParser();
//解析文件
pullParser.setInput(new FileInputStream("person.xml"), "utf-8");
//獲取事件類型
int type=pullParser.getEventType();
//循環移動解析器
Person person=null;
ArrayList<Person> persons =null;
while(type!=XmlPullParser.END_DOCUMENT){
switch(type){
case XmlPullParser.START_TAG:
if (pullParser.getName().equals("persons")) {
persons = new ArrayList<Person>();
}else if (pullParser.getName().equals("person")) {
person=new Person();
String id = pullParser.getAttributeValue(0);
person.setId(id);
}else if (pullParser.getName().equals("name")) {
//拿到下一個的值
String name= pullParser.nextText();
person.setName(name);
}else if (pullParser.getName().equals("age")) {
String age= pullParser.nextText();
//由於得到的是String類型,所以需要將這個String類型的轉換成int
person.setAge(Integer.parseInt(age));
}
break;
case XmlPullParser.END_TAG:
if (pullParser.getName().equals("person")) {
persons.add(person);
}
break;
default:
break;
}
type=pullParser.next();
}
System.out.println(persons);
}
}
Person對象:
package itcast.cn;
public class Person {
private String name;
private int age;
private String id;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Person [name=" + name + ", age=" + age + ", id=" + id + "]";
}
public Person(String id, String name, int age) {
super();
this.id = id;
this.name = name;
this.age = age;
}
public Person() {
super();
// TODO Auto-generated constructor stub
}
}