第一種: import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import java.util.ArrayList; import java.util.List; import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParserException; import org.xmlpull.v1.XmlPullParserFactory; /* * XML中的內容 <?xml version="1.0" encoding="utf-8"?> <Student> <student> <id>1</id> <name>張三</name> <age>22</age> </student> <student> <id>2</id> <name>李四</name> <age>20</age> </student> </Student> */ public class Pull1 { public static void main(String[] args) { //獲得解析工廠對象 try { XmlPullParserFactory factor=XmlPullParserFactory.newInstance(); //建立解析器 XmlPullParser parser=factor.newPullParser(); //解析器根文件關聯,下面兩種方法關聯看本身喜歡 //parser.setInput(new FileInputStream("f:\\Student.xml"),"utf-8"); //出現這個錯誤:爲文檔編碼問題PI must not start with xml (position:unknown @1 :5 in java.io.InputStreamReader@131245a) parser.setInput(new FileReader("e:\\Student2.xml")); //獲得事件常量 int type=parser.getEventType(); String tag;//做爲標記 List<Student>list=null; Student stu=null; while(type!=parser.END_DOCUMENT){//判斷不等於結束標記值爲1 //獲得標記 tag=parser.getName(); //用switch語句 switch (type) { case XmlPullParser.START_DOCUMENT://此語句只執行一次值爲0 System.out.println("開始解析文件"); list=new ArrayList<Student>(); break; case XmlPullParser.START_TAG://開始標記,也就是標記之間的內容判斷值爲2 if("student".equals(tag)){ stu=new Student();//一進入就開始建立對對象 }else if("id".equals(tag)){ stu.id=Integer.parseInt(parser.nextText());//獲取標記之間的內容 }else if("name".equals(tag)){ stu.name=parser.nextText(); }else if("age".equals(tag)){ String str=parser.nextText();//獲取標記之間的內容 stu.age=Integer.parseInt(str); } break; case XmlPullParser.END_TAG://此語句只執行一次 if("student".equals(tag)){//每一次標記之間結束時將對象添加到集合中 list.add(stu); } break; default: break; } type=parser.next();//標記跳到下一個標記,調到下一個事件常量 } //遍歷集合打印出來 for(Student s:list){ System.out.println(s); } } catch (XmlPullParserException e) { e.printStackTrace(); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (NumberFormatException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } 第二種: /* * XML中的內容,跟第一個不同的地方是,把id放在了<Student>標記裏面 <?xml version="1.0" encoding="utf-8" ?> <students> <student id="1"> <name>張三</name> <age>20</age> </student> <student id="2"> <name>李四</name> <age>22</age> </student> <student id="3"> <name>王五</name> <age>22</age> </student> </students> */ import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import java.util.ArrayList; import java.util.List; import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParserException; import org.xmlpull.v1.XmlPullParserFactory; public class Pull2 { public static void main(String[] args) { //獲得解析工廠對象 try { XmlPullParserFactory factor=XmlPullParserFactory.newInstance(); //建立解析器 XmlPullParser parser=factor.newPullParser(); //解析器根文件關聯,下面兩種方法關聯看本身喜歡 //parser.setInput(new FileInputStream("f:\\Student.xml"),"utf-8"); //出現這個錯誤:爲文檔編碼問題PI must not start with xml (position:unknown @1 :5 in java.io.InputStreamReader@131245a) parser.setInput(new FileReader("e:\\students.xml")); //獲得事件常量 int type=parser.getEventType(); String tag;//做爲標記 List<Student>list=null; Student stu=null; while(type!=parser.END_DOCUMENT){//判斷不等於結束標記值爲1 //獲得標記 tag=parser.getName(); //用switch語句 switch (type) { case XmlPullParser.START_DOCUMENT://此語句只執行一次值爲0 System.out.println("開始解析文件"); list=new ArrayList<Student>(); break; case XmlPullParser.START_TAG://開始標記,也就是標記之間的內容判斷值爲2 if("student".equals(tag)){ stu=new Student(); //因爲id在student裏面因此要遍歷裏面的屬性 for(int i=0;i<parser.getAttributeCount();i++){ String name=parser.getAttributeName(i); String value=parser.getAttributeValue(i); if("id".equals(name)){ stu.id=Integer.parseInt(value); } } }else if("name".equals(tag)){ stu.name=parser.nextText(); }else if("age".equals(tag)){ String str=parser.nextText();//獲取標記之間的內容 stu.age=Integer.parseInt(str); } break; case XmlPullParser.END_TAG://此語句只執行一次 if("student".equals(tag)){//每一次標記之間結束時將對象添加到集合中 list.add(stu); } break; default: break; } type=parser.next();//標記跳到下一個標記,調到下一個事件常量 } //遍歷集合打印出來 for(Student s:list){ System.out.println(s); } } catch (XmlPullParserException e) { e.printStackTrace(); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (NumberFormatException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } 實體類: public class Student { public int id; public String name; public int age; @Override public String toString() { return "Student [id=" + id + ", name=" + name + ", age=" + age + "]"; } }