首先,介绍一下本文背景。是在看第一行代码中的pull解析方式要下新软件,就懒得下,去网上找资料,但是发现很多博客都没有写完一个例子,没想到花了更多的时间。最后找到一篇完整的博客,自己加上一些批注,在这里记录一下
Pull步骤简单介绍
- 需要建立一个解析器对象XmlPullParser。
- 再使用XmlPullParser.setInput()方法设置解析器的输入。
- 之后再通过判断事件类型,循环调用next()方法获得解析的数据
工程文件截图
student.xml用于放要读的数据
Student是数组的泛型
ParserByPull是一个方法类,在里面实现读取
代码如下
student.xml
<?xml version="1.0" encoding="utf-8"?> <students> <student id="20110806100"> <name>小明</name> <age>22</age> <sex>男</sex> </student> <student id="20110806101"> <name>小李</name> <age>24</age> <sex>男</sex> </student> <student id="20110806102"> <name>小丽</name> <age>21</age> <sex>女</sex> </student> </students>Student.class
public class Student { private String id; private String name; private int age; private String sex;}(get()和set()方法也要,此处省略)
ParserByPull.class
扫描二维码关注公众号,回复:
1545120 查看本文章
public class ParserByPULL { //采用XmlPullParser来解析文件 public static List<Student> getStudents(InputStream inputStream)throws Throwable{ List<Student> students=null; Student mStudent=null; //创建XmlPullParser XmlPullParser parser= Xml.newPullParser(); //解析文件输入流 parser.setInput(inputStream,"UTF-8"); //得到当前的解析对象 int eventType=parser.getEventType(); //当解析工作还没完成时,调用next()方法得到下一个解析事件 while (eventType!=XmlPullParser.END_DOCUMENT){ switch (eventType){ case XmlPullParser.START_DOCUMENT: //解析开始的时候初始化list students=new ArrayList<>(); break; case XmlPullParser.START_TAG: //获得解析器当前指向的元素的名字 //当指向元素的名字和id,name,sex这些属性重合时可以返回他们的值 String XPPname=parser.getName(); if ("student".equals(XPPname)){ //通过解析器获取id的元素值,并设置一个新的Student对象的id mStudent=new Student(); mStudent.setId(parser.getAttributeValue(0)); } if (mStudent!=null) { if("name".equals(XPPname)) { //得到当前指向元素的值并赋值给name mStudent.setName(parser.nextText()); } if("age".equals(XPPname)) { //得到当前指向元素的值并赋值给age mStudent.setAge(new Short(parser.nextText())); } if("sex".equals(XPPname)) { //得到当前指向元素的值并赋值给sex mStudent.setSex(parser.nextText()); } } break; //出发结束元素事件 case XmlPullParser.END_TAG: if("student".equals(parser.getName())) { students.add(mStudent); mStudent = null; } break; default: break; } eventType = parser.next(); } return students; } }
MainActivity.class
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); AssetManager asset=getAssets(); try{ InputStream inputStream=asset.open("student.xml"); List<Student> list=ParserByPULL.getStudents(inputStream); for (Student stu:list){ Log.e("StudentInfo","Person ID: " + stu.getId() + "," + stu.getName() + ", " + stu.getAge() + ", " + stu.getSex()); } }catch (Throwable e){ e.printStackTrace(); } } }
结果截图