android XML数据解析
来源:互联网 发布:nginx conf 配置php 编辑:程序博客网 时间:2024/06/05 18:07
网络下载的数据主要有两种格式XML和JSON,但是这两种数据格式都有自己的格式符,解析数据就是从这两种格式的数据中取出我们需要的数据,去掉格式符。本文记录了两种常用XML解析方法:
JSON数据解析方法:http://blog.csdn.net/q296264785/article/details/53909442
XML数据解析常用方法之PULL解析方法:
private void XMLWithPull(String xmlData){//XML数据解析 pull方式 try { //1、获得一个XmlPullParserFactory实例 XmlPullParserFactory xmlPullParserFactory = XmlPullParserFactory.newInstance(); //2、通过XmlPullParserFactory实例得到XmlPullParser对象 XmlPullParser xmlPullParser = xmlPullParserFactory.newPullParser(); //3、加载需要解析的数据 xmlPullParser.setInput(new StringReader(xmlData));r //得到当前解析事件 int eventType = xmlPullParser.getEventType(); String id = ""; String name = ""; String version = ""; //如果解析事件不等于END_DOCUMENT,说明解析还没完成,需要继续解析 while(eventType != XmlPullParser.END_DOCUMENT){ //获得当前解析节点的名字 String nodeName = xmlPullParser.getName(); switch (eventType){ case XmlPullParser.START_TAG: if("id".equals(nodeName)){ id = xmlPullParser.nextText();//获取节点的内容并且赋值到对应变量 }else if("name".equals(nodeName)){ name = xmlPullParser.nextText(); }else if("version".equals(nodeName)){ version = xmlPullParser.nextText(); } break; //解析完一个节点后将数据输出 case XmlPullParser.END_TAG: if("app".equals(nodeName)){ Log.d("MainActivity", "id is " + id); Log.d("MainActivity", "name is " + name); Log.d("MainActivity", "version is " + version); } break; default:break; } //切换到下一个节点 eventType = xmlPullParser.next(); } } catch (XmlPullParserException e) { e.printStackTrace(); }catch (IOException e) { e.printStackTrace(); } }
XML数据解析常用方法之SAX解析方法:
SAX解析方法需要实现一个DefaultHandler 的子类并且重写相关的方法。方法的作用可以对应PULL解析理解。
public class ContentHandler extends DefaultHandler { private String nodeName; private StringBuilder id; private StringBuilder name; private StringBuilder version; @Override public void startDocument() throws SAXException {//开始解析XML的时候调用 id = new StringBuilder(); name = new StringBuilder(); version = new StringBuilder(); } @Override public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {//开始解析某个节点的时候调用 nodeName = localName; } @Override public void characters(char[] ch, int start, int length) throws SAXException {//获取节点中内容的时候调用 if("id".equals(nodeName)){ id.append(ch, start, length); }else if("name".equals(nodeName)){ name.append(ch, start, length); }else if("version".equals(nodeName)){ name.append(ch, start, length); } } @Override public void endElement(String uri, String localName, String qName) throws SAXException {//完成某个节点的时候调用 if("app".equals(localName)){ Log.d("MainActivity", "id is " + id.toString().trim()); Log.d("MainActivity", "name is " + name.toString().trim()); Log.d("MainActivity", "version is " + version.toString().trim()); id.setLength(0); name.setLength(0); version.setLength(0); } } @Override public void endDocument() throws SAXException {//完成整个解析的时候调用 super.endDocument(); }}
实例化DefaultHandler 子类,通过相关方法赋值解析数据。
private void XMLWithSAX(String xmlData){ SAXParserFactory factory = SAXParserFactory.newInstance(); try { XMLReader xmlReader = factory.newSAXParser().getXMLReader(); ContentHandler contentHandler = new ContentHandler(); xmlReader.setContentHandler(contentHandler); xmlReader.parse(new InputSource(new StringReader(xmlData))); } catch (SAXException e) { e.printStackTrace(); } catch (ParserConfigurationException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } }
解析的XML目标数据:
<apps><app><id>1</id><name>aa</name><version>1.0</version></app><app><id>2</id><name>Hello</name><version>1.2</version></app><app><id>3</id><name>bb</name><version>1.8</version></app></apps>
0 0
- Android---解析XML数据
- Android 解析XML数据
- Android XML数据解析
- Android XML数据解析
- android解析XML数据
- android XML数据解析
- Android解析xml数据
- Android解析XML数据
- Android数据解析-----解析xml数据
- Android数据解析之XML数据解析
- Android sax解析XML数据
- Android dom解析XML数据
- Android pull解析XML数据
- Android pull解析XML数据
- Android sax解析XML数据
- Android中XML数据解析
- Android 数据解析之 Xml
- android解析xml格式数据
- tensorflow基础知识
- Lua初学者笔记2
- .NET基础加强第五天(xml文档dom)
- 总结(算不上总结的总结)
- using ffmpeg to convert ts to mp4 & split mp4 into multi segments
- android XML数据解析
- 剑指offer-----找出二叉搜索树第k个节点(java版)
- 欢迎使用CSDN-markdown编辑器
- Android -- IPC通信机制之一Binder简介
- [数据结构]第十章-并查集
- 51nod 1082 与7无关的数
- Android 自定义数字键盘(三)自定义输入框
- Mac OS下命令行终端无法输入中文或中文显示?
- ButterKnife:8.1.0的使用