国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

解析XML(三種解析方式DOM,SAX,PULL)

2019-11-08 18:33:38
字體:
供稿:網(wǎng)友

                解析xml是在java編譯工作中最重要的一步,比如我們訪問某網(wǎng)站,我們就需要獲取它的數(shù)據(jù),我們發(fā)出請求,服務(wù)器

做出響應(yīng)。然后根據(jù)傳過來的數(shù)據(jù)判斷,是XML或是JSON.我們今天了解一下解析XML。

                首先配置網(wǎng)絡(luò)環(huán)境。我們模擬一下場景。

                1.開啟TomCat,搭建服務(wù)器

                 2.在root目錄下放入一個寫好XML文件

                  3.輸入DOS命令---ipconfig,復(fù)制生成一串ip地址,在瀏覽器中測試打印出文件

                 配置好久開始代碼編寫。解析XML有三種方式。第一種是DOM,不常用,他比較耗資源,需要一次性全部加載

 public void parseXML(View view){        new MyTask().execute();    }    //線程間通信機(jī)制    //子線程+Handler    //異步任務(wù)類 AsyncTask    class MyTask extends AsyncTask{        @Override        PRotected Object doInBackground(Object[] objects) {            //01.獲取網(wǎng)絡(luò)XML數(shù)據(jù)            //原生態(tài)底層:            //URLConnection            try {                URL url=new URL("http://192.168.43.135/persons.xml");                HttpURLConnection connection= (HttpURLConnection) url.openConnection();                //設(shè)置請求方式‘                connection.setRequestMethod("GET");                //設(shè)置請求連接超時的時間(優(yōu)化)                connection.setConnectTimeout(5000);                //獲取結(jié)果碼                int code=connection.getResponseCode();                if(code==200){                    //獲取服務(wù)器返回過來的結(jié)果                    InputStream is=connection.getInputStream();                    //打?。ㄗx)--》測試//                    BufferedReader br=new BufferedReader(new InputStreamReader(is));//                    String str=null;//                    while((str=br.readLine())!=null){//                        Log.i("test",str);//                    }                    //解析XML                    //01.使用DOM解析//                    DocumentBuilderFactory documentBuilderFactory=DocumentBuilderFactory.newInstance();//                    DocumentBuilder documentBuilder=documentBuilderFactory.newDocumentBuilder();//                    Document document=documentBuilder.parse(is);//                    //獲取跟標(biāo)簽//                    Element root=document.getDocumentElement();//                    Log.i("test","跟標(biāo)簽:"+root.getNodeName());////                    //獲取<persons>下面的所有的子標(biāo)簽<person>//                    NodeList nodeList=root.getElementsByTagName("person");//                    for (int i = 0; i <nodeList.getLength() ; i++) {//                        //獲取單個//                        //Node//                        //Element//                        Element personElement= (Element) nodeList.item(i);//                        //獲取<person>屬性id的值//                        String id=personElement.getAttribute("id");//                        Log.i("test",id);////                        //獲取<person>下面的子標(biāo)簽<name><age><image>的值//                        Element nameElement= (Element) personElement.getElementsByTagName("name").item(0);//                        String name=nameElement.getTextContent();//                        Element ageElement= (Element) personElement.getElementsByTagName("age").item(0);//                        String age=ageElement.getTextContent();//                        Element imageElement= (Element) personElement.getElementsByTagName("image").item(0);//                        String image=imageElement.getTextContent();////                        Log.i("test",name+" "+age+" "+image);//                    }
第二種SAX,特點是邊讀邊解析,在這里將主要代碼粘貼,其余同上

  //02.SAX(邊讀邊解析,基于事件(方法)驅(qū)動方式)//                    SAXParserFactory saxParserFactory=SAXParserFactory.newInstance();//                    SAXParser saxParser=saxParserFactory.newSAXParser();////                    saxParser.parse(is,new DefaultHandler(){//                        @Override//                        public void startDocument() throws SAXException {//                            super.startDocument();//                        }////                        @Override//                        public void endDocument() throws SAXException {//                            super.endDocument();//                        }////                        @Override//                        public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {//                            super.startElement(uri, localName, qName, attributes);//                            cuurentTag=localName;//                            //獲取開始標(biāo)簽的名字//                            if("person".equals(localName)){//                                //取屬性的值//                                String id=attributes.getValue(0);//                                Log.i("test",id);//                            }//////                        }////                        @Override//                        public void endElement(String uri, String localName, String qName) throws SAXException {//                            super.endElement(uri, localName, qName);//                            cuurentTag=null;//                        }////                        @Override//                        public void characters(char[] ch, int start, int length) throws SAXException {//                            super.characters(ch, start, length);//                            if("name".equals(cuurentTag)){//                                //獲取<name>的值//                                String name=new String(ch,start,length);//                                Log.i("test", "   "+name);//                            }else if("age".equals(cuurentTag)){//                                //獲取<name>的值//                                String age=new String(ch,start,length);//                                Log.i("test", "   "+age);//                            }else if("image".equals(cuurentTag)){//                                //獲取<name>的值//                                String image=new String(ch,start,length);//                                Log.i("test", "   "+image);//                            }//                        }//                    });

第三種PULL。也是安卓開發(fā)中用的最多的一種

 //03.使用PULL解析(類似SAX)                    XmlPullParser xmlPullParser=Xml.newPullParser();                    xmlPullParser.setInput(is,"UTF-8");                    //獲取解析的標(biāo)簽的類型                    int type=xmlPullParser.getEventType();                    while(type!=XmlPullParser.END_DOCUMENT){                        switch (type) {                            case XmlPullParser.START_TAG:                                //獲取開始標(biāo)簽名字                                String starttagName=xmlPullParser.getName();                                if("person".equals(starttagName)){                                    //獲取id的值                                    String id=xmlPullParser.getAttributeValue(0);                                    Log.i("test",id);                                }else if("name".equals(starttagName)){                                    String name=xmlPullParser.nextText();                                    Log.i("test",name);                                }else if("age".equals(starttagName)){                                    String age=xmlPullParser.nextText();                                    Log.i("test",age);                                }else if("image".equals(starttagName)){                                    String image=xmlPullParser.nextText();                                    Log.i("test",image);                                }                                break;                            case XmlPullParser.END_TAG:                                break;                        }                        //細(xì)節(jié):                        type=xmlPullParser.next();                    }

習(xí)慣用哪種可以自己去嘗試,個人覺得PULL比較簡便


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 呼伦贝尔市| 商洛市| 台中县| 如东县| 福贡县| 佛坪县| 宜春市| 南康市| 康乐县| 丹阳市| 牟定县| 方山县| 新郑市| 镇坪县| 岢岚县| 漳浦县| 同仁县| 子长县| 米泉市| 金塔县| 秦安县| 温宿县| 安化县| 彭泽县| 昌图县| 铁岭市| 金昌市| 湛江市| 缙云县| 汤原县| 凤庆县| 泽普县| 辽源市| 泽普县| 邯郸市| 锦州市| 大名县| 百色市| 浦县| 横峰县| 洪泽县|