您的位置:首页 > 其它

XML解析 PULL

2016-07-19 20:46 316 查看

XML解析

SAX:

基于事件驱动,顺序读取,占用内存小,不能任意访问指定节点(不灵活),速度快

适用于对内存要求高的设备使用

DOM:

基于树型结构存储,一次性把文档读入内存,占用内存较大,可以任意访问节点(灵活)

适用于在服务器端开发使用

基于DOM的实现还有:

JDOM(API使用集合)

DOM4J(整体性能较好,Hibernate就是使用Dom4j实现配置文件的解析)

PULL解析:

PULL解析的机制与SAX解析相似,都是基于事件驱动

不同的是:

SAX使用一个ContentHandler(内容处理器)来处理数据,解析器读取到相应的内容以回调

ContentHandler的相应方法的方式来处理。

而PULL是使用事件类型常量的标记的方式来处理数据。

使用PULL的步骤:

<1>创建一个PULL解析器对象:

XmlPullParser xmlPullParser = Xml.newPullParser();


<2>设置要解析的数据源

InputStream in = getResources().openRawResource(R.raw.person);
xmlPullParser.setInput(in,"utf-8");


<3>获取事件类型

int eventType = xmlPullParser.getEventType();


<4>通过循环来处理不同的事件类型,结束条件为解析到文档的末尾

while(eventType!=XmlPullParser.END_DOCUMENT){
//.....
eventType = xmlPullParser.next();
}


示例:

private ArrayList<Person>  parseXML() {
//        InputStream in = Xml.parse();  sax解析
InputStream in = getResources().openRawResource(R.raw.person);
//创建PULL解析器对象
XmlPullParser xmlPullParser = Xml.newPullParser();
ArrayList<Person> persons = new ArrayList();
Person p = null;
try {
//设置要解析的数据源
xmlPullParser.setInput(in,"utf-8");
int eventType = xmlPullParser.getEventType();
while(eventType!=XmlPullParser.END_DOCUMENT){
try {
switch (eventType){
case XmlPullParser.START_TAG:
String tag = xmlPullParser.getName();
p = getPerson(xmlPullParser, p, tag);
break;
case XmlPullParser.END_TAG:
if("person".equals(xmlPullParser.getName())){
persons.add(p);
}
break;
}
eventType = xmlPullParser.next();
} catch (IOException e) {
e.printStackTrace();
}
}

} catch (XmlPullParserException e) {
e.printStackTrace();
}

return persons;
}

private Person getPerson(XmlPullParser xmlPullParser, Person p, String tag) throws XmlPullParserException, IOException {
if("person".equals(tag)){
p = new Person();
p.setPersonid(xmlPullParser.getAttributeValue(xmlPullParser.getNamespace(),"personid"));
}else if("name".equals(tag)){
p.setName(xmlPullParser.nextText());
} else if("age".equals(tag)){
p.setAge(Integer.parseInt(xmlPullParser.nextText()));
} else if("sex".equals(tag)){
p.setSex(xmlPullParser.nextText());
} else if("tel".equals(tag)){
p.setTel(xmlPullParser.nextText());
}
return p;
}


使用PULL解析天气数据
http://ws.webxml.com.cn/WebServices/WeatherWS.asmx/getWeather?theCityCode=北京
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: