Android-解析XML
来源:互联网 发布:mac 删除桌面安装程序 编辑:程序博客网 时间:2024/06/16 06:57
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
- XML---Android中解析XML .
- XML - Android中解析XML
- android 解析XML 生成XML
- android Pull解析(XML解析)
- android XML解析
- Android Manifest.xml解析
- Android XML文档解析
- android xml解析
- android--xml解析
- Android--xml解析(Dom)
- Android中解析XML
- android SAX解析XML
- android中xml解析
- android教程--xml解析
- Android中XML解析
- android xml解析(一)
- android xml解析(二)
- Android--DOM解析XML
- JAVA中HashMap和Hashtable区别
- 《JAVA与模式》之简单工厂模式
- Linux - 如何使用gcc命令生成静态库和动态库
- Java学习笔记--NIO2文件系统
- mysql 连接url中useUnicode=true&characterEncoding=UTF-8 的作用
- Android-解析XML
- 《JAVA与模式》之工厂方法模式
- java11
- JAVA全集-06-异常处理
- Java中的集合
- 数据库的基础增删改查SQL语句
- 《JAVA与模式》之抽象工厂模式
- 算法导论——快排序算法及优化
- HDU-1003