Android-解析XML

XML在各种开发中都广泛应用,Android也不例外。作为承载数据的一个重要角色,如何读写XML成为Android开发中一项重要的技能。在Android中,常见的XML解析器分别为DOM解析器、SAX解析器和PULL解析器。

DOM解析器:

Android完全支持DOM 解析。利用DOM中的对象,可以对XML文档进行读取、搜索、修改、添加和删除等操作。
DOM的工作原理:使用DOM对XML文件进行操作时,首先要解析文件,将文件分为独立的元素、属性和注释等,然后以节点树的形式在内存中对XML文件进行表示,就可以通过节点树访问文档的内容,并根据需要修改文档——这就是DOM的工作原理。

SAX解析器

SAX解析器的优点是解析速度快,占用内存少。非常适合在Android移动设备中使用。
SAX的工作原理:SAX的工作原理简单地说就是对文档进行顺序扫描,

PULL解析器

PULL解析器小巧轻便,解析速度快,简单易用,非常适合在Android移动设备中使用,Android系统内部在解析各种XML时也是用PULL解析器,Android官方推荐开发者们使用Pull解析技术。Pull解析技术是第三方开发的开源技术,它同样可以应用于JavaSE开发。
PULL 的工作原理:XML pull提供了开始元素和结束元素。当某个元素开始时,我们可以调用parser.nextText从XML文档中提取所有字符数据。当解释到一个文档结束时,自动生成EndDocument事件。

解析实例:
1.通过一个局域网中的服务器中获取一个xml文件

     URL url=new URL("http://192.168.43.85:8080/test.xml");
            HttpURLConnection  connection= (HttpURLConnection) url.openConnection();
            //设置请求方式‘
            connection.setRequestMethod("GET");
            //设置请求连接超时的时间(优化)
            connection.setConnectTimeout(5000);
            //获得请求返回的结果码(200表示获取成功)
            int code=connection.getResponseCode();
                 //获取服务器返回过来的结果
                 InputStream is=connection.getInputStream();       

2.解析

// Dome解析:
      DocumentBuilderFactory documentBuilderFactory=DocumentBuilderFactory.newInstance();
      DocumentBuilder documentBuilder =documentBuilderFactory.newDocumentBuilder();
           Document  document=documentBuilder.parse(is);
           //获取根标签
           Element root=document.getDocumentElement();
            //获取<persons>下面的所有的子标签<person>
           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");
                        Log.i("ssss",id);
                        获取<person>下面的子标签的内容
                        Element nameElement= (Element) personelement.getElementsByTagName("name").item(0);
                        String name=nameElement.getTextContent();
                        Log.i("ssss",name);
                        Element ageElement= (Element) personelement.getElementsByTagName("age").item(0);
                        String age=ageElement.getTextContent();
                        Log.i("ssss",age);
                        Element imageElement= (Element) personelement.getElementsByTagName("image").item(0);
                        String image=imageElement.getTextContent();
                        Log.i("ssss",image);
//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 endElement(String uri, String localName, String qName) throws SAXException {
                            super.endElement(uri, localName, qName);
                            CuurentTag=null;
                        }

                        @Override
                        public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
                            super.startElement(uri, localName, qName, attributes);
                            CuurentTag=localName;
                            if("person".equals(localName)){
                                //取属性的值
                                String id=attributes.getValue(0);
                                Log.i("ssss",id);
                            }
                        }
                        @Override
                        public void characters(char[] ch, int start, int length) throws SAXException {
                            super.characters(ch, start, length);
                            //分别获取name、age、image标签的值
                            if("name".equals(CuurentTag)){
                                String name=new String(ch,start,length);
                                Log.i("ssss",name);
                            }else if("age".equals(CuurentTag)){
                                String age=new String(ch,start,length);
                                Log.i("ssss",age);
                            }else if("image".equals(CuurentTag)){
                                String image=new String(ch,start,length);
                                Log.i("ssss",image);
                            }
                        }
                    });
//PULL解析
                    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 startTAGName=xmlPullParser.getName();
                                if("person".equals(startTAGName)){
                                    String id=xmlPullParser.getAttributeValue(0);
                                    Log.i("ssss",id);
                                }else if("name".equals(startTAGName)){
                                    String name=xmlPullParser.nextText();
                                    Log.i("ssss",name);
                                }else if("age".equals(startTAGName)){
                                    String age=xmlPullParser.nextText();
                                    Log.i("ssss",age);
                                }else if("image".equals(startTAGName)){
                                    String image=xmlPullParser.nextText();
                                    Log.i("ssss",image);
                                }
                                break;
                            case XmlPullParser.END_TAG:
                                break;
                        }
                        type=xmlPullParser.next();
                    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值