In the previous article, which wrote Sax parsing XML, felt that the pull style was very similar to the SAX approach, except that Sax needed an auxiliary class that would write code in the callback method after the event was triggered, and pull would return an int value by invoking the method of the event type, and then write the code based on that value.
First, customize an XML file: Student.xml, and note that you are creating a new file instead of XML.
<span style= "FONT-SIZE:14PX;" ><?xml version= "1.0" encoding= "Utf-8"?> <students> <student id= "1" > <name> Zhang San </name> <sex> men </sex> <age>18</age> </student> < Student id= "2" > <name> John Doe </name> <sex> women </sex> <age>19</age> </student> <student id= "3" > <name> Harry </name> <sex> male </sex > <age>20</age> </student> </students> </span>
To parse the first data, for example:
<pre name= "code" class= "java" ><span style= "FONT-SIZE:14PX;" ><students> <student id= "1" > <name> Zhang San </name> <sex> men </sex> <age>18</age> </student> </span>
the whole process is: int event = Parser.geteventtype () produces a xmlpullparser.start_document: instantiation list→event = Parser.next () triggers the next event, Generate Xmlpullparser.start_tag, element named student, instantiate student, assign element attribute to corresponding field → event = Parser.next () to trigger the next event, generating Xmlpullparser.start_tag, the element is named name, the text information is assigned to the corresponding field → event = parser.next () triggers the next event, generates Xmlpullparser.end_tag, does not react →...... → Finally, </student>Xmlpullparser.end_tag, the element name is student, and the student object is stored in the list, which is set to null.
Finally, in the activity, a button is used to parse the data, which uses several classes.
<span style= "FONT-SIZE:14PX;" >package Com.example.xml_sax_demo_1;import Java.io.ioexception;import Java.io.inputstream;import Java.util.arraylist;import Java.util.list;import Javax.xml.parsers.parserconfigurationexception;import Javax.xml.parsers.saxparser;import Javax.xml.parsers.saxparserfactory;import Org.xml.sax.SAXException;import Org.xmlpull.v1.xmlpullparser;import Org.xmlpull.v1.xmlpullparserfactory;import Android.support.v7.app.actionbaractivity;import Android.os.bundle;import Android.util.xml;import Android.view.menu;import Android.view.menuitem;import Android.view.view;import Android.view.View.OnClickListener; Import Android.widget.button;public class Mainactivity extends actionbaractivity {@Overrideprotected void OnCreate ( Bundle savedinstancestate) {super.oncreate (savedinstancestate); Setcontentview (R.layout.activity_main); Button button = (button) Findviewbyid (R.id.button); Button.setonclicklistener (new Onclicklistener () {@Overridepublic void OnClick (View arg0) {//TODO AUto-generated method Stubtry {ReadXML ();} catch (Exception e) {//TODO auto-generated catch Blocke.printstacktrace ();}}) ;} private void ReadXML () throws Exception {Student Student = null; list<student> list = null; Xmlpullparserfactory xmlpullparserfactory = Xmlpullparserfactory.newinstance (); Xmlpullparser parser = Xmlpullparserfactory.newpullparser (); Instantiate Xmlpullparserinputstream stream = This.getclass (). getClassLoader (). getResourceAsStream ("Student.xml"); Get input stream Parser.setinput (stream, "UTF-8"); Two parameter input stream, encoded format int event = Parser.geteventtype ();//generates first event while (event! = xmlpullparser.end_document) {switch (event) { Case XmlPullParser.START_DOCUMENT:list = new arraylist<student> (); The document begins instantiating Listbreak;case XmlPullParser.START_TAG:if ("Student". Equals (Parser.getname ())) {student = new St Udent (); Student.setid (Integer.parseint (parser.getattributevalue (0));} if (student! = null) {if ("name". Equals (Parser.getname ())) {Student.setname (PARser.nexttext ());} else if ("Sex". Equals (Parser.getname ())) {Student.setsex (Parser.nexttext ());} else if ("Age". Equals (Parser.getname () ) {Student.setage (Integer.parseint (Parser.nexttext ()))}} Break;case XmlPullParser.END_TAG:if ("Student". Equals (Parser.getname ())) {List.add (student); student = null;} break;} event = Parser.next ();//Enter the next element and trigger the corresponding event}for (Student stu:list) {System.out.println (stu.tostring ());}}} </span>
Results:
Summary: Xmlpullparser class Several more important constants: Start_document, End_document, Start_tag, End_tag, in fact, there is a text. Several important methods GetName (), get the element name, Nexttext (), get the next text message, next (), read the next parsing state.
Android:pull Parsing xml