Android中解析Xml文件大致有三种,这里我着重介绍使用pull的方式解析xml文件。
首先我们需要了解xml文件的格式,以下是一个最简单的示例
<?xml version="1.0" encoding="UTF-8"?>
<books>
<book>
<name>围城</name>
<author>钱钟书</author>
</book>
<book>
<name>平凡的世界</name>
<author>路遥</author>
</book>
<book>
<name>穆斯林的葬礼</name>
<author>霍达</author>
</book>
</books>
以上是一个封装这书籍信息的简单的xml文件,我将以这个文件为例来通过pull方法解析改xml文件
pull的解析方法主要用到两个类,分别是XmlPullParserFactory和XmlPullParser,其中XmlPullParserFactory相当于工厂类来产生XmlPullParser对象,而XmlPullParser对象主要用来解析。
以下是解析过程,前提是我们已经有了book的实体类。
private void parseXml() {
Book book=null;
try {
InputStream inputStream=getResources().getAssets().open("books.xml");
//得到一个XmlPullParserFactory对象
XmlPullParserFactory pullParserFactory=XmlPullParserFactory.newInstance();
//得到XmlPullParser对象
XmlPullParser pullParser=pullParserFactory.newPullParser();
pullParser.setInput(inputStream, "UTF-8");
int event=pullParser.getEventType();
//假如没有到文档的末尾,则继续循环
while(event!=XmlPullParser.END_DOCUMENT){
String nodeName=pullParser.getName();
switch(event){
case XmlPullParser.START_DOCUMENT:
//文档的开始处
//一帮在文档的最开头处需要构建容纳解析到的对象的容器
books=new ArrayList<Book>();
break;
case XmlPullParser.START_TAG:
if("book".equals(nodeName)){
//在book标签的开始出需要构建对象
book=new Book();
}
if("name".equals(nodeName)){
book.setBookName(pullParser.nextText());
}
if("author".equals(nodeName)){
book.setBookAuthor(pullParser.nextText());
}
break;
case XmlPullParser.END_TAG:
if("book".equals(nodeName)){
//将封装好的对象放到集合中
books.add(book);
}
break;
}
event=pullParser.next();
}
} catch (Exception e) {
e.printStackTrace();
}
}
pull解析过程实际上是遍历文档的形式,通过parse.next()来获得下一个解析事件,同时可以通过parse.nextText()来获取标签之间的文本值。