在Android中,XML数据格式的解析主要有三种方式:Pull 解析、SAX解析和DOM解析。
在这里我来使用一下第一种解析方式。
Pull 解析方式是比较常用的一种,Android提供了一个类:XmlPullParserFactory ,在这里进行了一系列的数据解析操作。
我们可以直接使用方法:
第一步: 实例类对象 XmlPullParserFactory :
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
第二步:通过类对 XmlPullParser 进一步实例化:
XmlPullParser xmlPullParser = factory.newPullParser();
第三步:将获取出来的网络xml格式的数据类型设置进去:
xmlPullParser.setInput(new StringReader(xmlData));
第四步:得到当前解析的事件:
int eventType = xmlPullParser.getEventType();
第五步:对数据进行解析:
使用循环解析数据:
while (eventType!=XmlPullParser.END_DOCUMENT){ //表示当前解析工作还没有结束,就继续往下解析数据 String nodename = xmlPullParser.getName(); // 通过对象获取得到当前的一个节点的名字 String id =""; String name =""; switch (eventType){ case XmlPullParser.START_TAG: //开始解析某个节点
if ("id".equals(nodename)){ //如果发现ID和当前节点名相同,就调用nextText();方法来获取节点内具体内容。 id = xmlPullParser.nextText(); }else if("name".equals(nodename)){ name = xmlPullParser.nextText(); //如果发现name和当前节点名相同,就调用nextText();方法来获取节点内具体内容。 }
break;
case XmlPullParser.END_TAG: //当解析完成一个app 节点后,得到解析的数据
if ("app".equals(nodename)){ Log.d("lsb","id"+id); Log.d("lsb","name"+name); }
break;
default :
break;
}
eventType = xmlPullParser.next();
}
封装了一个方法方便调用:
private void xmlPull(String xmldata){ try { XmlPullParserFactory factory = XmlPullParserFactory.newInstance(); XmlPullParser xmlPullParser = factory.newPullParser(); xmlPullParser.setInput(new StringReader(xmldata)); int eventType = xmlPullParser.getEventType(); String id =""; String name =""; while (eventType!=XmlPullParser.END_DOCUMENT){ String nodename = xmlPullParser.getName(); switch (eventType){ case XmlPullParser.START_TAG: //開始解析某個節點 if ("id".equals(nodename)){ id = xmlPullParser.nextText(); }else if ("name".equals(nodename)){ name = xmlPullParser.nextText(); } break; case XmlPullParser.END_TAG://完成某個節點 if ("app".equals(nodename)){ Log.d("lsb","id"+id); Log.d("lsb","name"+name); } break; default: break; } eventType = xmlPullParser.next(); } } catch (XmlPullParserException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }