------- <a href="http://www.itheima.com" target="blank">android培训</a>、<a href="http://www.itheima.com" target="blank">java培训</a>、期待与您交流! ----------
在Android或者许多java软件的开发过程中,都需要对xml文件进行解析。当然解析xml的方法很多,比如SAX,Dom等,这里主要是使用pull解析器来实现。
public class PersonServer {
/**
* 从xml文件中获取数据的方法
* @param xml 文件名称
* @return 返回数据
* @throws Exception
*/
public static List<Person> getPerson(InputStream xml) throws Exception{
List<Person> persons = null;
Person person = null;
//android的Xml类来得到pull解析器对象,XmlPullParser pullParser = Xml.newPullParser()
XmlPullParser pullParser = XmlPullParserFactory.newInstance().newPullParser();
pullParser.setInput(xml, "utf-8"); //为pull解析器设置需要解析的xml数据
int event = pullParser.getEventType(); //通过getEventType方法来获得触发的第一个事件。
while(event!= XmlPullParser.END_DOCUMENT){
switch (event) {
case XmlPullParser.START_DOCUMENT:
persons = new ArrayList<Person>();
break;
case XmlPullParser.START_TAG:
if("person".equals(pullParser.getName())){
int id = new Integer(pullParser.getAttributeValue(0));
person = new Person();
person.setId(id);
//int id = new Integer(id);
}
if("name".equals(pullParser.getName())){
//pullParser.nextText()获取解析器指针指向name节点时,name节点后的文本节点的值;
String name = pullParser.nextText();
person.setName(name);
}
if("age".equals(pullParser.getName())){
//pullParser.nextText()获取解析器指针指向name节点时,name节点后的文本节点的值;
int age = new Integer(pullParser.nextText());
person.setAge(age);
}
break;
case XmlPullParser.END_TAG:
if("person".equals(pullParser.getName())){
persons.add(person);
person = null;
}
break;
}
event = pullParser.next(); //pull解析器不会主动解析xml文件,调用next()方法使得解析器的指针下移。
}
return persons;
}
}