理论部分:PULL解析、SAX解析和DOM解析。DOM解析是将xml文件全部读入内存,缺点是当XML文件很大时,先把这么大的文件读入内存会浪费很大内存;SAX解析是将整个XML文档看成一个事件源,而将文件分化成各种事件,当事件触发是,便触发方法,我们可以利用方法完成解析,其缺点是:虽然是扫描边解析,但是必须扫描完,不能控制扫描长度;PULL解析是最优的解析方式,边扫描边解析,扫描长度可以控制。
实践部分:涉及到6个API:Xml、XmlPullParser、XmlPullException、XmlPullFactory和XmlResourceParser和XmlSerializer
代码:
List<Book> books = null;;
Book book = null;
InputStream is = PullparserActivity.class
.getResourceAsStream("books.xml");
XmlPullParser xp = Xml.newPullParser();
xp.setInput(is, "UTF-8");
int event = xp.getEventType();
while (event != XmlPullParser.END_DOCUMENT) {
switch(event){
case XmlPullParser.START_TAG:
if("books".equals(xp.getName())){
books = new ArrayList<Book>();
}
if("book".equals(xp.getName())){
book = new Book();
book.setId(xp.getAttributeName(0));
}
if("name".equals(xp.getName())){
book.setName(xp.nextText());
}
if("price".equals(xp.getName())){
book.setPrice(xp.nextText());
}
case XmlPullParser.END_TAG:
books.add(book);
}
event = xp.next();
}