XMLPull读取才是最适合安卓的文件读取方式,DOM读取和SAX读取是不针对具体语言的,XMLPull读取类似SAX读取方式,实现过程大同小异,XMLPull是基于事件码EventType来实现每一步事件的操作
首先需要保存数据类,再就是文档解析器MyXMLPullUtil,代码如下
public class MyXMLPullUtil {
private InputStream input=null;
public MyXMLPullUtil(InputStream input){
this.input=input;
}
public List<Book> getAllBook() throws Exception{
List<Book> all=null;
Book book=null;
String elementName=null; //保存节点名称
XmlPullParserFactory factory=XmlPullParserFactory.newInstance();
XmlPullParser xpp=factory.newPullParser();
xpp.setInput(this.input, "UTF-8");
int eventType=xpp.getEventType(); //取得事件码
while(eventType!=XmlPullParser.END_DOCUMENT){
if(eventType==XmlPullParser.START_DOCUMENT){
all=new ArrayList<Book>(); //实例化元素集合
}else if(eventType==XmlPullParser.START_TAG){
elementName=xpp.getName();
if("book".equals(elementName)){
book=new Book(); //实例化Book类,以便保存属性的值
}
}else if(eventType==XmlPullParser.END_TAG){
elementName=xpp.getName();
if("book".equals(elementName)){
all.add(book);
book=null;
}
}else if(eventType==XmlPullParser.TEXT){
if("name".equals(elementName)){
book.setName(xpp.getText());
}else if("author".equals(elementName)){
book.setAuthor(xpp.getText());
}else if("age".equals(elementName)){
book.setAge(xpp.getText());
}
}
eventType=xpp.next(); //下一个book标签的读取
}
return all;
}
}
解析文档,调用解析器,主要代码如下
try{
InputStream input=new FileInputStream(file);
MyXMLPullUtil util=new MyXMLPullUtil(input);
List<Book> all=util.getAllBook();
//System.out.println("all:"+all.size());
//System.out.println("name:"+all.get(0).getName());
MyDemo.this.name.setText(all.get(1).getName());
MyDemo.this.author.setText(all.get(1).getAuthor());
MyDemo.this.age.setText(all.get(1).getAge());
}catch(Exception e){
e.printStackTrace();
}
InputStream input=new FileInputStream(file);
MyXMLPullUtil util=new MyXMLPullUtil(input);
List<Book> all=util.getAllBook();
//System.out.println("all:"+all.size());
//System.out.println("name:"+all.get(0).getName());
MyDemo.this.name.setText(all.get(1).getName());
MyDemo.this.author.setText(all.get(1).getAuthor());
MyDemo.this.age.setText(all.get(1).getAge());
}catch(Exception e){
e.printStackTrace();
}