Android解析xml(DOM SAX PULL)

也不知在黑暗中究竟沉睡了多久,也不知要有多难才能睁开双眼,我从远方赶来 恰巧你们也在,痴迷流连人间 我为她而狂野,我是这耀眼的瞬间,是划过天边的刹那火焰,我为你来看我不顾一切,我将熄灭永不能再回来,我在这里啊,就在这里啊,惊鸿一般短暂,像夏花一样绚烂,这是一个多美丽又遗憾的世界
——《生如夏花》朴树

Android端向web端访问数据,web端返回数据xml的形式,Android端自己解析。
首先在web端新建一个ssm框架的项目:
这里写图片描述
数据直接从数据库(MySQL)里面调用,而不是直接写死的数据
最重要的一点就是在JSP里,生成xml的格式时,切记不能空格,对于有些电脑要多加一行代码(<%@page isELIgnored=”false” %>)

开始解析:从web端访问过来的数据解析到listview里

public class MainActivity extends AppCompatActivity {

    private ListView lv_main_getdata_xml;
    private ProgressDialog progressDialog;
    private List<Userentity> Listuser=new ArrayList<>();
    private ListViewAdapter listViewAdapter;
    String currentTag=null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        lv_main_getdata_xml = (ListView) findViewById(R.id.lv_main_getdata_xml);


        listViewAdapter = new ListViewAdapter();
        lv_main_getdata_xml.setAdapter(listViewAdapter);

        progressDialog = new ProgressDialog(this);
        progressDialog.setMessage("正在拼命loading中...");
    }

    class MyTask extends AsyncTask {


        private Userentity user;
        private Userentity users;

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            progressDialog.show();
        }

        @Override
        protected Object doInBackground(Object[] params) {

             final List<Userentity> Lists=new ArrayList<>();
            //获取网络数据
            //01.定义获取网络数据的路径
            String path =getString(R.string.server_name)+"listuser.xhtml";
            try {
                //02.实例化URL
                URL url = new URL(path);
                //03.获取对象链接
                HttpURLConnection connection = (HttpURLConnection) url.openConnection();
                //04.设置请求方式
                connection.setRequestMethod("GET");
                //05.设置链接超时的时间
                connection.setConnectTimeout(5000);
                //06.获取响应码
                int code=connection.getResponseCode();
                //Log.i("test","     "+code);
                if (code==200) {
                    //07.获取返回过来的数据(xml)
                    InputStream is = connection.getInputStream();
                    //08.测试(删除--注释)
                    //缓冲字符流
                    /*String str=null;
                    BufferedReader br=new BufferedReader(new InputStreamReader(is));
                    while ((str=br.readLine())!=null){
                        Log.i("test",str);
                    }*/
                    //09.解析XML(DOM SAX PULL)
                    //09.1 DOM解析
//                    try {
//                        DocumentBuilderFactory documentBuilderFactory=DocumentBuilderFactory.newInstance();
//                        DocumentBuilder documentBuilder=documentBuilderFactory.newDocumentBuilder();
//                        Document document=documentBuilder.parse(is);
//                        //获取根标签
//                       Element root=document.getDocumentElement();
//                       NodeList nodeList=root.getElementsByTagName("user");
//                        for (int i = 0; i < nodeList.getLength(); i++) {
//                           Element  element= (Element) nodeList.item(i);
//                            //获取属性的名字
//                            String id=element.getAttribute("id");
//
//                            //获取子标签name pwd
//                           Element elementName= (Element) element.getElementsByTagName("name").item(0);
//                           String  name=elementName.getTextContent();
//                            Element elementPwd= (Element) element.getElementsByTagName("pwd").item(0);
//                            String  pwd=elementPwd.getTextContent();
//                            Log.i("test","  "+id+"   "+name+"  "+pwd);
//
//                            Userentity user=new Userentity(id,name,pwd);
//                            Lists.add(user);
//
//                        }
//                    } catch (ParserConfigurationException e) {
//                        e.printStackTrace();
//                    } catch (SAXException e) {
//                        e.printStackTrace();
//                    }
                    //09.2 SAX解析 特点:边读边解析 基于事件(方法)驱动
                    //开始标签 结束标签 开始文档 结束文档 文本
//                    try {
//
//                        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);
//                                currentTag=localName;
//                                if ("user".equals(localName)){
//                                    //实列化对象
//                                    user = new Userentity();
//                                    String id=attributes.getValue(0);
//                                    user.setUid(id);
//                                }
//                            }
//                            @Override
//                            public void endElement(String uri, String localName, String qName) throws SAXException {
//                                super.endElement(uri, localName, qName);
//                                currentTag=null;
//                                if ("user".equals(localName)){
//                                    Lists.add(user);
//                                }
//                            }
//
//                            @Override
//                            public void characters(char[] ch, int start, int length) throws SAXException {
//                                super.characters(ch, start, length);
//                                 if("name".equals(currentTag)){
//                                     String name=new String(ch,start,length);
//                                     user.setUname(name);
//
//                                }else if("pwd".equals(currentTag)){
//                                    String pwd=new String(ch,start,length);
//                                    user.setUpwd(pwd);
//
//                                }
//                            }
//                        });
//                    } catch (ParserConfigurationException e) {
//                        e.printStackTrace();
//                    } catch (SAXException e) {
//                        e.printStackTrace();
//                    }
                    //09.3 PULL解析
                    try {

                        XmlPullParser xmlPullParser=Xml.newPullParser();
                        xmlPullParser.setInput(is,"UTF-8");
                        int  type=xmlPullParser.getEventType();

                        while (type!=xmlPullParser.END_DOCUMENT){
                            switch (type){
                                case XmlPullParser.START_TAG:
                                    //获取开始标签的名字
                                   String startNameTag=xmlPullParser.getName();
                                    if("user".equals(startNameTag)){
                                        users = new Userentity();
                                        String id=xmlPullParser.getAttributeValue(0);
                                        users.setUid(id);
                                    }else if("name".equals(startNameTag)){
                                        String name= xmlPullParser.nextText();
                                        users.setUname(name);
                                    }else if("pwd".equals(startNameTag)){
                                        String pwd= xmlPullParser.nextText();
                                        users.setUpwd(pwd);
                                    }
                                    break;
                                case XmlPullParser.END_TAG:
                                    //获取结束标签的名字
                                    String endTagName=xmlPullParser.getName();
                                    if("user".equals(endTagName)){
                                        Lists.add(users);
                                    }
                                    break;
                            }
                            type=xmlPullParser.next();
                        }
                    } catch (XmlPullParserException e) {
                        e.printStackTrace();
                    }


                }
            } catch (MalformedURLException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
            return Lists;
        }

        @Override
        protected void onPostExecute(Object object) {
            super.onPostExecute(object);
            List<Userentity> Lists= (List<Userentity>)object;

            Listuser.addAll(Lists);

            listViewAdapter.notifyDataSetChanged();

            progressDialog.cancel();
        }
    }


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

    }
    //给listview设置适配器
    class ListViewAdapter extends BaseAdapter {

        @Override
        public int getCount() {
            return Listuser.size();
        }

        @Override
        public Object getItem(int position) {
            return position;
        }

        @Override
        public long getItemId(int position) {
            return position;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            View view = getLayoutInflater().inflate(R.layout.activity_textview, null);
            //拿控件
            TextView list_text_id = (TextView) view.findViewById(R.id.list_text_id);
            TextView list_text_name = (TextView) view.findViewById(R.id.list_text_name);
            TextView list_text_pwd = (TextView) view.findViewById(R.id.list_text_pwd);
            //绑定数值
            list_text_id.setText(Listuser.get(position).getUid());
            list_text_name.setText(Listuser.get(position).getUname());
            list_text_pwd.setText(Listuser.get(position).getUpwd());
            return view;
        }
    }

}

DOM解析:(DocumentBuilder,DocumentBuilderFactory,Document)原生态jdbc低层代码。
特点:解析速度快,一次性解析整个文档。加载大文件时候效率低。
SAX解析:(SAXParser,SAXParserFactory):使用流的形式处理,是一种以基于事件(方法)为驱动的解析器。
特点:边读边解析,解析速度快,占用内存少,同时sax解析提供了很多方法:开始、结束标签;开始、结束文档;文本的方法。
PULL解析:Pull解析器与SAX解析器性质类似,都是基于事件处理模式。用法不同:Pull解析器需要自己获取事件后做出相当于的操作,pull是用于Android,用于Java中需要导入pull解析依赖包。
特点:解析速度快、使用方便、效率高。

在values里面的strings.xml我把IP地址写在了这里面,就可以让他在以后的XML解析方便调用就好了,因为每次联网的IP地址都会改变,所有每次连网都要在strings.xml里面改下IP地址就可以

最后在清单文件中配置联网权限:

<uses-permission android:name="android.permission.INTERNET" />
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值