解析之前,我们可以先搭建个本地的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格式数据
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 1. XML解析的两种方式 服务器返回的XML数据如下 1.1使用Pull方式解析XML数据 使用Pull解析,首...