您的位置:首页 > 移动开发 > Android开发

Android数据存储之XmlPull解析XML文件(读取部分)

2013-05-09 12:50 621 查看
由于DOM解析xml文档需要将整个xml DOM树读入,当文件很大时,这种解析效率很低,而Android自带有一个事件触发型的xml解析器XmlPullParser,与SAX解析方式比较相似,区别在于XmlPullParser允许主动从解析器获取事件,满足条件后结束解析。

首先写XmlPullUtil类(用途:操作解析器),成员变量与构造方法:

public class XmlPullUtil {
// 准备XmlUllParser需要的InputStream
private InputStream inputStream = null;
private XmlPullParserFactory xppFac = null;
private XmlPullParser xpp = null;

public XmlPullUtil(InputStream inputStream) {
this.inputStream = inputStream;
}


其中的getAllPerson()方法实现解析文档,返回一个欲解析节点的对象列表;

View Code

public class MainActivity extends Activity {

private TextView idInfoText = null;
private TextView nameInfoText = null;
private Button readXmlBtn = null;

private File file = null;

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

idInfoText = (TextView) findViewById(R.id.idInfoText);
nameInfoText = (TextView) findViewById(R.id.nameInfoText);
readXmlBtn = (Button) findViewById(R.id.readXmlBtn);

readXmlBtn.setOnClickListener(new ReadXmlBtn());

}

private class ReadXmlBtn implements OnClickListener {

@Override
public void onClick(View v) {
// 首先调用检测储存环境的方法
if(!MainActivity.this.CheckEnvironment()) {
return;
} else {
try {
// 实例化XmlPullUtil类
XmlPullUtil xpu = new XmlPullUtil(new FileInputStream(file));
// 获取persons列表
List<Person> persons = xpu.getAllPerson();
// 显示结果
MainActivity.this.idInfoText.setText(persons.get(0).getId());
MainActivity.this.nameInfoText.setText(persons.get(0).getName());
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (XmlPullParserException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}

}
}

}

/* 检测储存环境是否配置正常,并设置文件存放路径 */
private boolean CheckEnvironment() {
if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
file = new File(Environment.getExternalStorageDirectory().toString() + File.separator + "documents"
+ File.separator + "shuai.xml");
if (!file.getParentFile().exists()) {
file.getParentFile().mkdirs();
}
return true;
} else {
return false;
}
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: