(一)关于 解析XML格式数据

解析之前,我们可以先搭建个本地的Web服务器,使用Apache服务器(下载地址:百度即有提供下载),安装完成后在htdocs目录下新建一个get_data.xml文件,这时在浏览器访问127.0.0.1/get_data.xml这个网址,就能出现你新建文件的内容。
解析XML数据常用的有两种解析方式:Pull解析和SAX解析。(一)Pull解析XmlPullParserFactory xmlPullParserFactory=XmlPullParserFactory.newInstance(); XmlPullParser xmlPullParser=xmlPullParserFactory.newPullParser();
首先获取到XMLPullParserFactory的实例(newInstance()),并借助这个实例得到XMLPullParser的对象(newPullParser()),接着通过xmlPullParser.setInput(new StringReader(xmlData))开始解析服务器返回的数据,解析过程:通过getEventType()得到当前解析事件(就是某个结点!!),int eventType=xmlPullParser.getEventType(); String id="";String name="";String version=""; while(eventType!=XmlPullParser.END_DOCUMENT){ String nodename=xmlPullParser.getName(); switch(eventType){//开始解析某个结点 case XmlPullParser.START_TAG: if("id".equals(nodename)){ id=xmlPullParser.nextText();//nextText()获取某个结点的具体内容 }else if("name".equals(nodename)){ name=xmlPullParser.nextText(); }else if("version".equals(nodename)){ version=xmlPullParser.nextText();} break; //完成某个结点的解析 case XmlPullParser.END_TAG: if("app".equals(nodename)){ Log.d("MainActivity"," id is "+id); Log.d("MainActivity"," name is "+name); Log.d("MainActivity"," version is "+version);} break; default: break;} eventType=xmlPullParser.next();//调用next()获取下一个结点!!! }}catch(Exception e){e.printStackTrace();}
(二)SAX解析:新建一个ContentHandler类继承DefaultHandler类,并重写部分方法:1、startDocument()(官方文档Receive notification of the beginning of the document):每处理一个XML文档都会响应一次。所以这个方法里可以写需要初始化的代码。2、startElement(String uri,String localName,String qName,Attributes attributes)(官方文档Receive notification of the beginning of the element):这是处理每个结点所触发的方法,通过这个方法你可以直接当前处理的节点的名称以及属性。3、characters(char[] ch,int start,int length)(官方文档Receive notification of character data inside an element.):会在获取结点中的内容的时候调用,但该方法不会告诉你文本所属的标签。4、endElement(String uri,String localName,String qName)(官方文档Receive notification of the end of an element.): 遇到一个结点的结束标签时,将会出发这个方法,并且会传递结束标签的名称。5、endDocument()(官方文档Receive notification of the end of the document.);完成整个XML解析时调用。而在MainActivity中先建了一个SAXParserFactory的对象(newInstance()),再获取到XMLReader的对象(SAXParserFactory.newSAXParser().getXMLReader()),接着将我们写好的ContentHandler的实例设置到XMLReader中(xmlReader.setContentHandlet(ContentHandler handler)(Allow an application to register a content event handler),再调用xmlReader.parse(InputSource input)解析XML文件

你可能感兴趣的:((一)关于 解析XML格式数据)