PULL解析器小巧轻便,解析速度快,简单易用,非常适合在Android移动设备中使用,Android系统内部在解析各种XML时也是用PULL解析器,Android官方推荐开发者们使用Pull解析技术。Pull解析技术是第三方开发的开源技术,它同样可以应用于JavaSE开发。
xml文件如下:
<books>
<book id="1">
<name>english</name>
<price>15.5f</price>
</book>
<book id="2">
<name>chinese</name>
<price>20.5f</price>
</book>
</books>
关于实现实现解析代码如下
创建一个实现类:
public class PullAnalysis {
//创建集合存放数据
private ArrayList<Book> list=null;
private String tags="";
int eventype;//声明事件类型
private Book book;
//创建方法实现解析以便调用
public ArrayList<Book> pull(InputStream is) throws Exception{
//获取解析工具
XmlPullParser xmlPullParser=Xml.newPullParser();
//切记流的格式要不读不出来
xmlPullParser.setInput(is, "utf-8");
/**
* 获取事件类型
*/
int eventype=xmlPullParser.getEventType();
//通过不断的判断处理数据直到最后节点
while (eventype!=XmlPullParser.END_DOCUMENT){
switch (eventype) {
//文档头
case XmlPullParser.START_DOCUMENT:
//创建集合
list=new ArrayList<Book>();
break;
//标签
case XmlPullParser.START_TAG:
//获取标签类的类容
tags=xmlPullParser.getName();
if(tags.equals("book")){
book=new Book();
//获取节点内id;
book.setId(xmlPullParser.getAttributeValue(0));
}
break;
case XmlPullParser.TEXT:
//获取相应的text值
String text=xmlPullParser.getText();
if(tags.equals("name")){
book.setName(text);
}else if (tags.equals("price")) {
book.setPrice(text);
}
break;
case XmlPullParser.END_TAG:
//尾标签
tags=xmlPullParser.getName();
if(tags.equals("book")){
list.add(book);
Log.i("ssw",list+"");
//类一定要制空
book=null;
}
//内容制空
tags="";
break;
case XmlPullParser.END_DOCUMENT:
break;
default:
break;
}
//继续下一轮的判断
eventype=xmlPullParser.next();
Log.i("qqqqq","完毕");
}
return list;
}
}
如果通过xutils 框架操作如下
HttpUtils utils=new HttpUtils();
utils.send(HttpMethod.GET,"http://169.254.184.92:8088/test/book.xml",
new RequestCallBack<String>() {
@Override
public void onFailure(HttpException arg0, String arg1) {
// TODO Auto-generated method stub
Log.i("tag", "aaaaaaaaaaa");
}
@Override
public void onSuccess(ResponseInfo<String> arg0) {
// TODO Auto-generated method stub
String ss=arg0.result;
//把字符串转换为流
InputStream is = new ByteArrayInputStream(ss.getBytes());
//调用类
PullAnalysis analysis=new PullAnalysis();
try {//调用类的方法返回list
list=analysis.pull(is);
Log.i("ss",list.get(0).getName()+"");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
try {
is.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
});