核心代码如下:
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
XmlPullParser parser = resources.getXml(R.xml.people);
String msg = "";
try {
while(parser.next()!=XmlPullParser.END_DOCUMENT){
String people = parser.getName();
String name = null;
String age = null;
String height =null;
if((people!=null)&&people.equals("person")){
int count = parser.getAttributeCount();
for(int i=0;i<count;i++){
String attrName = parser.getAttributeName(i);
String attrValue = parser.getAttributeValue(i);
if(attrName!=null&&"name".equals(attrName)){
name = attrValue;
}
if(attrName!=null&&"age".equals(attrName)){
age = attrValue;
}
if(attrName!=null&&"height".equals(attrName)){
height = attrValue;
}
}
if((name!=null)&&(age!=null)&&(height!=null)){
msg+="姓名:"+name+",年龄:"+age+",身高:"+height+"\n";
Toast.makeText(getApplicationContext(), msg, Toast.LENGTH_LONG).show();
display.setText(msg);
}
}
}
} catch (XmlPullParserException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
});
XmlPullParser的XML事件类型有如下几种:
1.START_TAG->>读取到标签开始标志
2.END_TAG->>读取到标签结束标志
3.TEXT->>读取文本内容
4.END_DOCUMENT->>文档末尾
解析XML文件的方式 有如下几种 :
SAX:Simple API for XML
采用的是事件驱动,也就是它解析XML文档并需要解析完整个文档,在解析过程中,它会判断解析出的当前字符是否符合XML中的某部分,如果符合则触发事件,如果不符合则触发相应的回调函数。此回调函数封装在ContentHandler接口中。。因为ContentHandler被实现后会被强制实现很多无用方法,故不用此接口,我们继承DefaultHandler类,因为其实现了ContentHandler中一部分我们需要的方法,省去了一些我们无用的方法哦。所以选择用这个。
缺点是,解析过后不能倒退回来查看数据 哦。
DOM:Document Object Model
此种解析方式是把已知的XML文档全部载入到内存中,并将其存储为dom树,根据dom结点与子结点之间的关系来解析文件,如果文件过大的话,解析会很耗时而且很耗资源的。
PULL.
转载于:https://blog.51cto.com/mzh3344258/733373