Android Pull解析

本文涉及的产品
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
全局流量管理 GTM,标准版 1个月
简介:

  解析xml的三种方式:DOM, SAX, PULL

好像Android学习过程中SAX被提到的概率高了一些. 固然SAX解析很好,并且名字很sexy. 可Pull解析有过之而无不及.

开工.

先认识一个文件catalogue.xml,放置于assets文件夹下

 
  1. <?xml version="1.0" encoding="UTF-8"?> 
  2. <chapters> 
  3.         <chapter id="1"> 
  4.             <name>wait_notify_demo</name> 
  5.             <summary>wait_notify例子</summary> 
  6.         </chapter> 
  7. </chapters> 

可以理解为一本书的章节对象, 第一章名为wait_notify_demo

然后我们要解析之

 
  1. package com.lc.corecode.utility; 
  2.  
  3. import java.io.InputStream; 
  4. import java.util.LinkedList; 
  5. import java.util.List; 
  6. import org.xmlpull.v1.XmlPullParser; 
  7. import android.util.Xml; 
  8. import com.lc.corecode.pojo.Chapter; 
  9.  
  10. public class PullParse { 
  11.     /** 
  12.      * pull解析catalogue.xml 
  13.      * @param inputStream 目标文件 
  14.      * @return chapter对象的集合 
  15.      * @throws Exception 
  16.      */ 
  17.     public List<Chapter> getAllChapters(InputStream inputStream) throws Exception{ 
  18.         List<Chapter> chapters = null
  19.         Chapter chapter = null
  20.         XmlPullParser parser =Xml.newPullParser(); 
  21.         parser.setInput(inputStream, "UTF-8"); 
  22.          
  23.         int event = parser.getEventType();//产生第一个事件 
  24.         while (event != XmlPullParser.END_DOCUMENT) { 
  25.             switch (event) { 
  26.             case XmlPullParser.START_DOCUMENT://文档开始 
  27.                 chapters = new LinkedList<Chapter>(); 
  28.                 break
  29.             case XmlPullParser.START_TAG://标签开始事件 
  30.                 if ("chapter".equals(parser.getName())) {//标签为<chapter> 
  31.                     chapter = new Chapter(); 
  32.                     chapter.setId(Integer.parseInt(parser.getAttributeValue(0))); 
  33.                 } 
  34.                 if (chapter != null) { 
  35.                     if ("name".equals(parser.getName())) {//标签为<name> 
  36.                         chapter.setName(parser.nextText()); 
  37.                     } else if ("summary".equals(parser.getName())){ 
  38.                         chapter.setSummary(parser.nextText()); 
  39.                     } 
  40.                 } 
  41.                 break
  42.             case XmlPullParser.END_TAG://标签结束 
  43.                 if ("chapter".equals(parser.getName())) {//结束标签</chapter> 
  44.                     chapters.add(chapter); 
  45.                     chapter = null
  46.                 } 
  47.                 break
  48.             default
  49.                 break
  50.             } 
  51.             event = parser.next();//进入下一个元素 
  52.         } 
  53.         return chapters; 
  54.     } 

最后是找个地方调用

 
  1. PullParse pullParse = new PullParse(); 
  2. List<Chapter> chapters = pullParse.getAllChapters(getResources().getAssets().open("catalogue.xml")); 

收工.



本文转自chainli 51CTO博客,原文链接:http://blog.51cto.com/lichen/1194036,如需转载请自行联系原作者

目录
打赏
0
0
0
0
69
分享
相关文章
【Android】网络技术知识总结之WebView,HttpURLConnection,OKHttp,XML的pull解析方式
本文总结了Android中几种常用的网络技术,包括WebView、HttpURLConnection、OKHttp和XML的Pull解析方式。每种技术都有其独特的特点和适用场景。理解并熟练运用这些技术,可以帮助开发者构建高效、可靠的网络应用程序。通过示例代码和详细解释,本文为开发者提供了实用的参考和指导。
51 15
Android调试终极指南:ADB安装+多设备连接+ANR日志抓取全流程解析,覆盖环境变量配置/多设备调试/ANR日志分析全流程,附Win/Mac/Linux三平台解决方案
ADB(Android Debug Bridge)是安卓开发中的重要工具,用于连接电脑与安卓设备,实现文件传输、应用管理、日志抓取等功能。本文介绍了 ADB 的基本概念、安装配置及常用命令。包括:1) 基本命令如 `adb version` 和 `adb devices`;2) 权限操作如 `adb root` 和 `adb shell`;3) APK 操作如安装、卸载应用;4) 文件传输如 `adb push` 和 `adb pull`;5) 日志记录如 `adb logcat`;6) 系统信息获取如屏幕截图和录屏。通过这些功能,用户可高效调试和管理安卓设备。
深入探索Android系统架构:从内核到应用层的全面解析
本文旨在为读者提供一份详尽的Android系统架构分析,从底层的Linux内核到顶层的应用程序框架。我们将探讨Android系统的模块化设计、各层之间的交互机制以及它们如何共同协作以支持丰富多样的应用生态。通过本篇文章,开发者和爱好者可以更深入理解Android平台的工作原理,从而优化开发流程和提升应用性能。
安卓与iOS开发中的线程管理差异解析
在移动应用开发的广阔天地中,安卓和iOS两大平台各自拥有独特的魅力。如同东西方文化的差异,它们在处理多线程任务时也展现出不同的哲学。本文将带你穿梭于这两个平台之间,比较它们在线程管理上的核心理念、实现方式及性能考量,助你成为跨平台的编程高手。
深入理解HTTP/2:nghttp2库源码解析及客户端实现示例
通过解析nghttp2库的源码和实现一个简单的HTTP/2客户端示例,本文详细介绍了HTTP/2的关键特性和nghttp2的核心实现。了解这些内容可以帮助开发者更好地理解HTTP/2协议,提高Web应用的性能和用户体验。对于实际开发中的应用,可以根据需要进一步优化和扩展代码,以满足具体需求。
72 29
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
153 2
JS数组操作方法全景图,全网最全构建完整知识网络!js数组操作方法全集(实现筛选转换、随机排序洗牌算法、复杂数据处理统计等情景详解,附大量源码和易错点解析)
这些方法提供了对数组的全面操作,包括搜索、遍历、转换和聚合等。通过分为原地操作方法、非原地操作方法和其他方法便于您理解和记忆,并熟悉他们各自的使用方法与使用范围。详细的案例与进阶使用,方便您理解数组操作的底层原理。链式调用的几个案例,让您玩转数组操作。 只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
从入门到精通:H5游戏源码开发技术全解析与未来趋势洞察
H5游戏凭借其跨平台、易传播和开发成本低的优势,近年来发展迅猛。接下来,让我们深入了解 H5 游戏源码开发的技术教程以及未来的发展趋势。
分片上传技术全解析:原理、优势与应用(含简单实现源码)
分片上传通过将大文件分割成多个小的片段或块,然后并行或顺序地上传这些片段,从而提高上传效率和可靠性,特别适用于大文件的上传场景,尤其是在网络环境不佳时,分片上传能有效提高上传体验。 博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~

热门文章

最新文章

推荐镜像

更多