Android数据解析之XML篇
来源:互联网 发布:js 打开ie浏览器 编辑:程序博客网 时间:2024/09/21 06:35
假设在网络上有这么一段数据XML数据
<apps><app><id>1</id><name>Google Maps</name><version>1.0</version></app><app><id>2</id><name>Chrome</name><version>2.1</version></app><app><id>3</id><name>Google Play</name><version>2.3</version></app></apps>
Pull解析(这里我们将通过网络传输回的数据以String类型传入函数进行解析)
private void parseXMLWithPull(String xmlData) { try { //获取一个XmlPullParserFactory的实例 XmlPullParserFactory factory = XmlPullParserFactory.newInstance(); XmlPullParser xmlPullParser = factory.newPullParser(); xmlPullParser.setInput(new StringReader(xmlData)); //getEventType用于获取当前解析事件 int eventType = xmlPullParser.getEventType(); String id = ""; String name = ""; String version = ""; //判断解析是否完成 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 (Exception e) { e.printStackTrace(); }}
SAX解析
新建一个类继承自DefaultHandler,并重写父类的五个方法
public class SAXHandler extends DefaultHandler { @Override public void startDocument() throws SAXException {//开始解析xml } @Override public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {//开始解析某个节点 } @Override public void characters(char[] ch, int start, int length) throws SAXException {//获取节点内容 } @Override public void endElement(String uri, String localName, String qName) throws SAXException {//结束解析 } @Override public void endDocument() throws SAXException { }}
针对本文XML数据的解析
public class SAXHandler extends DefaultHandler { private String nodeName; private StringBuilder id; private StringBuilder name; private StringBuilder version; @Override public void startDocument() throws SAXException { 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 { // 根据当前的结点名判断将内容添加到哪一个StringBuilder对象中 if ("id".equals(nodeName)) { id.append(ch, start, length); } else if ("name".equals(nodeName)) { name.append(ch, start, length); } else if ("version".equals(nodeName)) { version.append(ch, start, length); } } @Override public void endElement(String uri, String localName, String qName) throws SAXException { if ("app".equals(localName)) { Log.d("ContentHandler", "id is " + id.toString().trim()); Log.d("ContentHandler", "name is " + name.toString().trim()); Log.d("ContentHandler", "version is " + version.toString().trim()); //清空StringBuilder,上面的trim()用于去除多余的换行空格 id.setLength(0); name.setLength(0); version.setLength(0); } } @Override public void endDocument() throws SAXException { }}
OK,简单的xml解析就是这些了,接下来再重点总结一下gson格式的数据解析。
0 0
- Android数据解析之XML篇
- Android数据解析之XML数据解析
- Android 数据解析之 Xml
- Android之使用Pull解析Xml数据
- Android 网络获取数据之XML解析
- android之与xml数据解析
- Android网络之数据解析----SAX方式解析XML数据
- Android网络之数据解析----SAX方式解析XML数据
- Android网络之数据解析----SAX方式解析XML数据
- Android网络之数据解析----SAX方式解析XML数据
- Android网络之数据解析----SAX方式解析XML数据
- Android网络之数据解析----SAX方式解析XML数据
- Android中级之网络数据解析一之xml解析
- 数据解析之XML
- Android---解析XML数据
- Android 解析XML数据
- Android XML数据解析
- Android XML数据解析
- [cherry-pick, merge, rebase]
- python正则表达式的注释方法
- Dubbo架构设计详解
- UIPageControl的简单使用
- awk中数组的运用实例
- Android数据解析之XML篇
- Android中项目中各个文件夹的含义和用途详解
- poj3114 Countries in War 强连通分量+dijkstra或者DAG最短路
- .bundle的制作
- 可调速自动播放ppt
- $(":gt(index)")
- Window pageXOffset 和 pageYOffset 属性
- Android开发之Widget桌面时钟
- 自定义导航栏按钮UIBarButtonItem 文字或图片