小兔网

pull解析xml文件,和sax和dom一样 都可以脱离android单独使用,pull和sax的原理一样,不一样的地方是pull读取xml文件后调用方法返回的是数字,
读取到xml的声明返回数字0 START_DOCUMENT;
读取到xml的结束返回数字1 END_DOCUMENT ;
读取到xml的开始标签返回数字2 START_TAG
读取到xml的结束标签返回数字3 END_TAG
读取到xml的文本返回数字4 TEXT

pull是开源的项目 源码下载地址http://www.zhishitu.com/

被解析的xml文档和android dom 解析xml方式 中的xml文档一样,命名为pullTest.xml.

private String pullParseXml(InputStream inputStream) {String result = "";//解析全部的xmlboolean isParse = true;try {// 创建一个xmlPullParser的工厂XmlPullParserFactory factory = XmlPullParserFactory.newInstance();// 获取一个解析实例XmlPullParser parse = factory.newPullParser();// 设置输入流的编码格式parse.setInput(inputStream, "UTF-8");// 当前事件的类型int eventType = parse.getEventType();while (XmlPullParser.END_DOCUMENT != eventType) {// 当前节点的名称String nodeName = parse.getName();switch (eventType) {case XmlPullParser.START_TAG:if ("group".equals(nodeName)) {// 解析<group>节点中的属性值,getAttributeCount()获取属性的个数for (int i = 0; i < parse.getAttributeCount(); i++) {// 属性名称String groupName = parse.getAttributeName(i);// 属性名称对应的值String nameValue = parse.getAttributeValue(i);result = result + groupName + " = " + nameValue;}result += "\n";} else if ("person".equals(nodeName)) {String personName = parse.getAttributeValue(0);String age = parse.getAttributeValue(1);result = result + "personName = " + personName+ "age =" + age + "\n";} else if ("chinese".equals(nodeName)) {//节点对应的文本String chinese = parse.nextText();Pattern p = Pattern.compile("\\s*|\t|\r|\n");Matcher m = p.matcher(chinese);chinese = m.replaceAll("");result = result + "chinese = " + chinese;} else if ("english".equals(nodeName)) {String english = parse.nextText();Pattern p = Pattern.compile("\\s*|\t|\r|\n");Matcher m = p.matcher(english);english = m.replaceAll("");result = result + "english = " + english + "\n";}break;case XmlPullParser.END_TAG://在解析到一个group节点完成时,退出解析xml文件//if("group".equals(nodeName)){//eventType = XmlPullParser.END_DOCUMENT; //isParse = false;//}break;default:break;}//整个xml文件全部解析if(isParse){eventType = parse.next();}}} catch (XmlPullParserException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}return result;}

pull和sax不同最主要的体现在pull可以由客户随时终止解析xml.sax解析,只能从文档头一直读到尾,中间不能停止也不能对文件进行修改。直到解析完了整个文档才会返回。

//在解析到一个group节点完成时,退出解析xml文件//if("group".equals(nodeName)){//eventType = XmlPullParser.END_DOCUMENT; //isParse = false;//}



只要满足退出解析的条件,只需要设置如下代码即可。

eventType = XmlPullParser.END_DOCUMENT;


pull解析方式用到的方法,大部分我都在代码中注释了。


以上就是android pull 解析xml方式 的内容,更多相关内容请关注小兔网(www.zhishitu.com)!