XML文件解析之Pull解析

时间:2022-10-31 13:07:37

以下是XML文件的例子:

<?xml version="1.0" encoding="utf-8"?>
<student>
<stu>
<name>雅</name>
<id>130001</id>
</stu>
<stu>
<name>邦</name>
<id>130002</id>
</stu>
<stu>
<name>田</name>
<id>130003</id>
</stu>
</student>


解析XML文件时候,根本文件创建一个实体类是必不可少的:

package com.wxw.xmlparser.bean;

public class Student {
private String name;
private int id;

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public int getId() {
return id;
}

public void setId(int id) {
this.id = id;
}
}

之后便是XML文件的解析过程了,由于现在开始慢慢全面使用Studio,以下代码是用Studio写的:

package com.wxw.xmlparser;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Xml;
import com.wxw.xmlparser.bean.Student;
import org.xmlpull.v1.XmlPullParser;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

// 创建一个List集合用来存放实体类
List<Student> stu_lists = null;
// 创建实体类对象
Student stu = null;

/**
* 这里的IO流只是说要提供一个InputStream,一般由:
* <1> 从本地文件读取
* <2> 从资源文件中读取
* <3> 从网络上获取(此种方式用的多)
*/
InputStream is = new InputStream() {
@Override
public int read() throws IOException {
return 0;
}
};

// 开始解析文件
XmlPullParser xpp = Xml.newPullParser();
try {
xpp.setInput(is, "utf-8");
int type = xpp.getEventType();
while(type != XmlPullParser.END_DOCUMENT){
switch (type){
case XmlPullParser.START_TAG:
if("student".equals(xpp.getName())){
stu_lists = new ArrayList<Student>();
}
else if("stu".equals(xpp.getName())){
stu = new Student();
}
else if("name".equals(xpp.getName())){
String name = xpp.nextText();
stu.setName(name);
}
else if("id".equals(xpp.getName())){
int id = Integer.valueOf(xpp.nextText());
stu.setId(id);
}
break;
case XmlPullParser.END_TAG:
if("stu".equals(xpp.getName())){
stu_lists.add(stu);
}
break;
}

// 移动到下一个标记
xpp.next();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}

由此,XML文件的内容就保存在List集合中了。