xml解析之pull解析
XML解析有三种方式,这里简单介绍pull解析 这里简单介绍下解析的机制:其实就是先获取到XmlPullParser对象 我这里是通过XmlPullParserFactory获取的 有了对象之后其实就是根据记录EventType(通过XmlPullParser对象获得)然后逐个扫描XML的所有标签 这里举个例子,假如我们有个最简单的XML <root><body>test</body></root> 那么他就会通过while(eventType != xmlPullParser.END_DOCUMENT){}扫描5次 注意中间的文字也是会扫描一次的,不是只有标签才会扫描。 这里要说下END_DOCUMENT,它指的是最后的标签也就是我们例子里的</root>,那么这个循环就是直到eventype记录到最后一个标签停止。 在这里先上部分代码 public void initLists(){ //实例化工厂对象 XmlPullParserFactory factory = null; ConvenienceCheckModel convenienceCheckModel = null; List<ConvenienceCheckModel> list = new ArrayList<ConvenienceCheckModel>(); try { factory = XmlPullParserFactory.newInstance(); factory.setNamespaceAware(true); XmlPullParser xmlPullParser = factory.newPullParser(); InputStream inputStream = this.getResources().openRawResource(R.raw.convenience_check_contents); xmlPullParser.setInput(inputStream,"UTF-8"); int eventType = xmlPullParser.getEventType(); //如果不读到end标签就继续循环 while(eventType != xmlPullParser.END_DOCUMENT){ String tag = xmlPullParser.getName(); //如果是start标签 switch (eventType){ case XmlPullParser.START_TAG: if(tag.equals("name")){ convenienceCheckModel = new ConvenienceCheckModel(); convenienceCheckModel.setName(xmlPullParser.nextText()); }else if(tag.equals("number")){ convenienceCheckModel.setNumber(xmlPullParser.nextText()); list.add(convenienceCheckModel);//2个属性都已经添加,将其加入list } break; //如果是end标签 case XmlPullParser.END_TAG: //如果end标签是categories按逻辑加入lists清除子list内容 if(tag.equals("categories")){ lists.add(list); list = new ArrayList<ConvenienceCheckModel>(); // list.clear(); } break; } eventType = xmlPullParser.next(); } } catch (XmlPullParserException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } }解析的xml是 <root> <categories> <category> <name>民警、匪警</name> <number>110</number> </category> <category> <name>急救中心</name> <number>120</number> </category> <category> <name>火灾、火警</name> <number>119</number> </category> <category> <name>交通事故、交警</name> <number>122</number> </category> </categories> <categories> <category> <name>申通快递</name> <number>0574-62820966</number> </category> <category> <name>圆通快递</name> <number>0574-62556567</number> </category> <category> <name>中通快递</name> <number>0574-62630488</number> </category> <category> <name>顺丰快递</name> <number>4008222221</number> </category> </categories> </root>要想解析xml其实无非就是根据逻辑判断你要在哪取数据,标签名是知道位置的途径,可以通过eventType 与xmlPullParser.START_TAG,END_TAG进行初步筛选, START_TAG代表起始标签,END_TAG表示结束标签,然后像上面代码那样进入其中通过xmlPullParser.getName()这个方法获取标签名进一步判断如果是想要的可以通过 xmlPullParser.nextText()获取下一个位置的文字内容,当然我们都知道想要下1个位置有文字内容, 那这里必须是START_TAG.相信通过上面的代码和部分介绍你已经会使用 pull解析XML了吧。再提一下2个方法,一个是xmlPullParser.Text,代表是文本,也就是标签中放文字的地方。一个是getText(),如果你在START_TAG上使用这个方法的话 是不能获取文字的,因为标签上是没有值的,只能用上面提过的nextText(). 只有在xmlPullParser.Text下面可以用getText()获取到值。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |