Pull解析器是android自带的xml解析工具,可以在程序中直接使用,不需要引入jar包。
1 <?xml version="1.0" encoding="UTF-8"?> 2 <persons> 3 <person id="01"> 4 <name>张三</name> 5 <sex>男</sex> 6 <age>18</age> 7 </person> 8 <person id="02"> 9 <name>李四</name> 10 <sex>女</sex> 11 <age>25</age> 12 </person> 13 </persons>
以上面的xml为例:
首先,我们需要一个javaBean,android不推荐get、set,但是影响并不大,就不要在意这些细节了。
public class Person { private String id=""; private String name=""; private String sex=""; private int age=0; public Person() { // TODO Auto-generated constructor stub } public void setId(String id){ this.id=id; } public void setName(String name) { this.name = name; } public void setSex(String sex) { this.sex = sex; } public void setAge(int age) { this.age = age; } public String getId(){ return id; } public String getName() { return name; } public String getSex() { return sex; } public int getAge() { return age; } }
然后,通过XmlPullParser.getEventType()判断开始结束,XmlPullParser.getName()获得标签,XmlPullParser.getText()获得内容。不要忘记XmlPullParser.next()。
public List<Person> parse(InputStream in) { XmlPullParser parser = Xml.newPullParser(); try { parser.setInput(in, "UTF-8"); int eventType = parser.getEventType();// 返回当前事件类型 Person person = null; List<Person> persons = null; while (eventType != XmlPullParser.END_DOCUMENT) { switch (eventType) { case XmlPullParser.START_DOCUMENT: persons=new ArrayList<Person>(); break; case XmlPullParser.START_TAG: String name=parser.getName(); if("person".equalsIgnoreCase(name)){ person=new Person(); }else if("id".equalsIgnoreCase(name)&&person!=null){ eventType = parser.next();//不要忘了这里 person.setId(parser.getText()); }else if("name".equalsIgnoreCase(name)&&person!=null){ eventType = parser.next(); person.setName(parser.getText()); }else if("sex".equalsIgnoreCase(name)&&person!=null){ eventType = parser.next(); person.setSex(parser.getText()); }else if("age".equalsIgnoreCase(name)&&person!=null){ eventType = parser.next(); person.setAge(Integer.parseInt(parser.getText())); } break; case XmlPullParser.END_TAG: if("person".equalsIgnoreCase(parser.getName())&&person!=null){ persons.add(person); person=null; } break; default: break; } eventType = parser.next(); } in.close(); return persons; } catch (XmlPullParserException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; }
OK,大功告成了。
xml解析还有很多其他方法,SAX、DOM、DOM4J、JDOM等等。PULL相对其他解析器而言,占用内存小,效率也不错,使用灵活。通常情况下,是Android应用中解析Xml的首选。