Android-解析XML(Dom,Sax,Pull)

//Dom解析
public void ParseXML(View view) {
            new MyThread().execute();
           //02.解析xml
    }
       //异步任务类
    class MyThread extends AsyncTask{
           @Override
           protected Object doInBackground(Object[] params) {
               try {
                   URL url = new URL("http://www.w3school.com.cn/example/xmle/plant_catalog.xml");
                   HttpURLConnection connection = (HttpURLConnection) url.openConnection();
                   //获得请求方式
                   connection.setRequestMethod("GET");
                   //设置请求连接超时的时间
                   connection.setConnectTimeout(5000);
                   //获取结果码
                   int code=connection.getResponseCode();
                   if (code==200){
                       //获取服务器返回来的结果
                       InputStream inputStream=connection.getInputStream();
                       //打印
                      /* BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(inputStream));
                       String str=null;
                       while ((str=bufferedReader.readLine())!=null){
                           Log.i("test",str);
                       }*/
                       //使用Dom解析
                       DocumentBuilderFactory documentBuilderFactory=DocumentBuilderFactory.newInstance();
                       DocumentBuilder documentBuilder=documentBuilderFactory.newDocumentBuilder();
                       Document document=documentBuilder.parse(inputStream);
                        //获取跟标签
                       Element element=document.getDocumentElement();
                       Log.i("test"," 跟标签 "+element.getNodeName());
                        //获取跟标签下面的子标签
                       NodeList nodeList=element.getElementsByTagName("PLANT");
                       for (int i = 0; i < nodeList.getLength(); i++) {
                           Element personElement= (Element) nodeList.item(i);
                          //获取跟标签下面的内容
                          Element COMMON= (Element) personElement.getElementsByTagName("COMMON").item(0);
                          String COMMONname=COMMON.getTextContent();
                          Element BOTANICAL= (Element) personElement.getElementsByTagName("BOTANICAL").item(0);
                          String BOTANICALNname=BOTANICAL.getTextContent();
                          Element ZONE= (Element) personElement.getElementsByTagName("ZONE").item(0);
                          String ZONENname=ZONE.getTextContent();
                          Log.i("test",COMMONname+" "+BOTANICALNname+"  "+ZONENname);
                      }
                   }
               } catch (MalformedURLException e) {
                   e.printStackTrace();
               } catch (IOException e) {
                   e.printStackTrace();
               } catch (ParserConfigurationException e) {
                   e.printStackTrace();
               } catch (SAXException e) {
                   e.printStackTrace();
               }
               return null;
               }

           @Override
           protected void onPostExecute(Object o) {
               super.onPostExecute(o);
               //03.展示
           }
       }
//Sax解析
            
                       
SAXParserFactory saxParserFactory=SAXParserFactory.newInstance();
                       SAXParser saxParser=saxParserFactory.newSAXParser();
                       saxParser.parse(inputStream,new DefaultHandler(){
                           @Override
                           public void endDocument() throws SAXException {
                               super.endDocument();}
                           @Override
                           public void startDocument() throws SAXException {
                               super.startDocument();}
                           @Override
                           public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
                               super.startElement(uri, localName, qName, attributes);
                               currentTag=localName;
                               Log.i("ccc",localName);}
                           @Override
                           public void endElement(String uri, String localName, String qName) throws SAXException {
                               super.endElement(uri, localName, qName);
                              currentTag=null;
                       }
                             @Override
                               public void characters(char[] ch, int start, int length) throws SAXException {
                                   super.characters(ch, start, length);
                               //正文
                                if("COMMON".equals(currentTag)){
                                    //获得值
                                    String COMMON=new String(ch,start,length);
                                    Log.i("test","    "+COMMON);
                                }else if ("BOTANICAL".equals(currentTag)){
                                    String BOTANICAL=new String(ch,start,length);
                                    Log.i("test","    "+BOTANICAL);
                                }
                              }
                            });}
               } catch (MalformedURLException e) {
                   e.printStackTrace();
               } catch (IOException e) {
                   e.printStackTrace();
               } catch (ParserConfigurationException e) {
                   e.printStackTrace();
               } catch (SAXException e) {
                   e.printStackTrace();
               }
                return null;
               }
           @Override
           protected void onPostExecute(Object o) {
               super.onPostExecute(o);
  
           }






//Pull解析

  //pull解析
                   XmlPullParser xmlpullparser= Xml.newPullParser();
                   xmlpullparser.setInput(inputStream,"utf-8");
                    //获取解析的标签类型
                  int type=xmlpullparser.getEventType();
                   while (type!=XmlPullParser.END_DOCUMENT){
                         switch (type){
                             case XmlPullParser.START_TAG:
                                 //获取开始标签的名字
                                 String starttagname=xmlpullparser.getName();
                                 if ("COMMON".equals(starttagname)){
                                     String common=xmlpullparser.nextText();
                                     Log.i("test",common);}
                                      break;
                             case XmlPullParser.END_TAG:
                                 break;}
                           type=xmlpullparser.next();
                    }
               } catch (MalformedURLException e) {
                   e.printStackTrace();
               } catch (IOException e) {
                   e.printStackTrace();
               } 
catch (XmlPullParserException e) {
                   e.printStackTrace();
               }
           
               return null;
               }
           @Override
           protected void onPostExecute(Object o) {
               super.onPostExecute(o);
               //03.展示
           }






评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值