android 解析XML最常用的dom ,sax , pull

代码如下:

package com.example.android_JxXML;
import android.os.AsyncTask;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.util.Xml;
import android.view.View;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;import android.os.AsyncTask;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.util.Xml;
import android.view.View;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.TextView;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
public class MainActivity extends AppCompatActivity {

    private String loName;
    List<String> listid=new ArrayList<>();
    List<String> listname=new ArrayList<>();
    List<String> listage=new ArrayList<>();
    private ListView lv_mian_view;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        lv_mian_view = (ListView) findViewById(R.id.lv_mian_view);


         }


    public void parserxml(View view) {
        new MyTask().execute();

    }

    class MyTask extends AsyncTask {
        @Override
        protected Object doInBackground(Object[] params) {
            //1.获取网路XML数据
            //2.原生态层
            //3.URLConnection
            try {
                URL url = new URL("http://192.168.191.3:8080/parseXML.xml");

                    HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
                   //设置请求的方式
                 httpURLConnection.setRequestMethod("GET");
                    //设置请求连接超时的时间(优化)
                   httpURLConnection.setConnectTimeout(5000);
                    //获取结果码
                    int code=httpURLConnection.getResponseCode();

                    if(code==200){
                        //获取服务器返回过来的结果 用流的方式接收
                        InputStream is=httpURLConnection.getInputStream();

                        //解析XML
                        //01.使用DOM解析
//                        DocumentBuilderFactory documentBuilderFactory=DocumentBuilderFactory.newInstance();
//                        DocumentBuilder documentBuilder=documentBuilderFactory.newDocumentBuilder();
//                        Document document= documentBuilder.parse(is);
//                        //获取跟标签
//                        Element root= document.getDocumentElement();
//                        //获取跟标签下面的所有标签xxx
//                         NodeList nodeList= root.getElementsByTagName("person");
//                        for (int i = 0; i <nodeList.getLength() ; i++) {
//                            //获取单个
//                            Element personElement= (Element)  nodeList.item(i);
//                            //获取《person》属性id的值
//                            String id=personElement.getAttribute("id");
//                            //获取<person>下面的子标签<name><age><image>的值
//                            Element nameElement= (Element)  personElement.getElementsByTagName("name").item(0);
//                            nameElement.getTextContent();
//                            Element ageElement= (Element)  personElement.getElementsByTagName("age").item(0);
//                            nameElement.getTextContent();
//                        }


       //02 SAX(边读边解析,基于事件(方法)驱动方式)
//                        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);
//                               // 获取开始标签的名字
//                                loName = localName;
//                                if("person".equals(localName)){
//                                    //取属性的值
//                                   String id= attributes.getValue(0);
//                                }
//                            }
//                            @Override
//                            public void endElement(String uri, String localName, String qName) throws SAXException {
//                                super.endElement(uri, localName, qName);
//                                loName=null;
//                            }
//                            @Override
//                            public void characters(char[] ch, int start, int length) throws SAXException {
//                                super.characters(ch, start, length);
//                                if("name".equals(loName)){
//                                String name=new String(ch,start,length);
//                            }else if("age".equals(loName)){
//                                String age=new String(ch,start,length);
//                            }
//                        }
//                        });




                        //03.pull解析XML
                        XmlPullParser xmlPullParser= Xml.newPullParser();
                        xmlPullParser.setInput(is,"UTF-8");
                        //获取解析的标签的类型
                       int type=xmlPullParser.getEventType();
                        while(type!=XmlPullParser.END_DOCUMENT){
                            //END_DOCUMENT 最后结束
                            switch (type){
                                case XmlPullParser.START_TAG:
                                    //开始获取标签的名字
                                String  startName=xmlPullParser.getName();
                                    if("person".equals(startName)){
                                        //获取id的值
                                        String id=xmlPullParser.getAttributeValue(0);
                                         listid.add(id);
                                    }else if("name".equals(startName)){
                                     String   name = xmlPullParser.nextText();
                                      listname.add(name);
                                    }else if("age".equals(startName)){
                                        String  age = xmlPullParser.nextText();
                                         listage.add(age);
                                    }
                                    break;
                                case XmlPullParser.END_TAG:
                                    break;
                            }
                            //细节:
                            type=xmlPullParser.next();
                        }
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }
                catch (XmlPullParserException e) {
                    e.printStackTrace();
                }
//                catch (ParserConfigurationException e) {
//                    e.printStackTrace();
//                } catch (SAXException e) {
//                    e.printStackTrace();
//                }
//                catch (ParserConfigurationException e) {
//                    e.printStackTrace();
//                } catch (SAXException e) {
//                    e.printStackTrace();
//                }

            return null;
        }


        @Override
        protected void onPostExecute(Object o) {
            //该方法主要是做数据的页面展示
            List<Map<String,Object>> date=new ArrayList<>();
            for (int i = 0; i <listid.size() ; i++) {
                Map<String,Object> map=new HashMap<>();
                map.put("id",listid.get(i));
                map.put("name",listname.get(i));
                map.put("age",listage.get(i));
                date.add(map);
            }
            SimpleAdapter adpater=new SimpleAdapter(getBaseContext(),date,R.layout.item_list,new String[]{"id","name","age"},new int[]{R.id.tv_list_id,R.id.tv_list_name,R.id.tv_list_age});
            lv_mian_view.setAdapter(adpater);
            super.onPreExecute();
        }
    }


}

添加网络权限

<uses-permission android:name="android.permission.INTERNET"></uses-permission>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
社会的进步导致人们对于学习的追求永不止境,那么追求农业信息化的方式也从单一的田地教程变成了多样化的学习方式。多样化的学习方式不仅仅是需要人们智慧的依靠,还需要能够通过软件的加持进行信息化的价值体现。软件和系统的产生,从表面上来看是方便了某一行业和某一行业的用户,其实是从本质上来说是提高了社会的进步。就拿我们常见的出行而言,滴滴出行看似是为了打车和出行的人方便,但其实通过另外一种程度上来说,可以通过软件应用的调度和发展来为社会、城市出行的发展做出巨大的贡献。我们国家从最早的中国制造业演变到现在的“智造”,就是因为有软件信息系统的价值,能够将一些智慧的因素加入到制造的过程当中,而这一点就是软件系统来改变生产和现实的需求。在计算机时代日益发展的今天,计算机网络正快速融入这个社会的每一个领域。农业的发展是社会当中一种必有可少的方式。果树在种植和培养是直接影响果农及果商的发展,但在果树的资源管理方面还是有着很大的不同,所以信息多样化的果树管理方式很重要。在传统的果树资源管理上还有着很大的约束,为此开发和设计JSP杏种质资源管理系统,该系统内容丰富多彩,用户可以在线进行果杏树的资源查询等。本文还是使用JSP的方式来进行管理的,但在系统建设过程当中也考虑了许许多多信息安全的保护。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值