第一种: 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 + "]"; } }