Android开发8——利用pull解析器读写XML文件

简介:

一、基本介绍

对XML解析有SAX和DOM等多种方式,Android中极力推荐xmlpull方式解析xml。xmlpull不仅可用在Android上同样也适用于javase,但在javase环境中需自己获取xmlpull所依赖的类库,kxml2-2.3.0.jar,xmlpull_1_1_3_4c.jar。

 

jar包下载网址
http://www.xmlpull.org/
http://kxml.sourceforge.net/

 

二、例子

读取到xml的声明返回数字0 START_DOCUMENT;
读取到xml的结束返回数字1 END_DOCUMENT ;
读取到xml的开始标签返回数字2 START_TAG
读取到xml的结束标签返回数字3 END_TAG
读取到xml的文本返回数字4 TEXT

 
  1. <?xml version="1.0" encoding="UTF-8"?> 
  2. <people> 
  3.  <person id="001"> 
  4.   <name>XY1</name> 
  5.   <age>22</age> 
  6.  </person> 
  7.  <person id="002"> 
  8.   <name>XY2</name> 
  9.   <age>22</age> 
  10.  </person> 
  11. </people> 
  12.  

 

 
  1. package cn.xy.service;  
  2.  
  3. import java.io.InputStream;  
  4. import java.io.OutputStream;  
  5. import java.util.ArrayList;  
  6. import java.util.List;  
  7.  
  8. import org.xmlpull.v1.XmlPullParser;  
  9. import org.xmlpull.v1.XmlSerializer;  
  10.  
  11. import android.util.Xml;  
  12. import cn.xy.model.Person;  
  13.  
  14.  
  15. public class PersonService  
  16. {  
  17.    
  18.  public List getPeople(InputStream xml) throws Exception  
  19.  {  
  20.   List lst = null;  
  21.   Person person = null;  
  22.  
  23.   // 利用ANDROID提供的API快速获得pull解析器  
  24.   XmlPullParser pullParser = Xml.newPullParser();  
  25.  
  26.   // 设置需要解析的XML数据  
  27.   pullParser.setInput(xml, "UTF-8");  
  28.  
  29.   // 取得事件  
  30.   int event = pullParser.getEventType();  
  31.  
  32.   // 若为解析到末尾  
  33.   while (event != XmlPullParser.END_DOCUMENT) // 文档结束  
  34.   {  
  35.    String nodeName = pullParser.getName();  
  36.    switch (event)  
  37.    {  
  38.     case XmlPullParser.START_DOCUMENT: // 文档开始  
  39.      lst = new ArrayList();  
  40.      break;  
  41.     case XmlPullParser.START_TAG: // 标签开始  
  42.      if ("person".equals(nodeName))  
  43.      {  
  44.       String id = pullParser.getAttributeValue(0);  
  45.       person = new Person();  
  46.       person.setId(id);  
  47.      }  
  48.      if ("name".equals(nodeName))  
  49.      {  
  50.       String name = pullParser.nextText();  
  51.       person.setName(name);  
  52.      }  
  53.      if ("age".equals(nodeName))  
  54.      {  
  55.       int age = Integer.valueOf(pullParser.nextText());  
  56.       person.setAge(age);  
  57.      }  
  58.      break;  
  59.     case XmlPullParser.END_TAG: // 标签结束  
  60.      if ("person".equals(nodeName))  
  61.      {  
  62.       lst.add(person);  
  63.       person = null;  
  64.      }  
  65.      break;  
  66.    }  
  67.    event = pullParser.next(); // 下一个标签  
  68.   }  
  69.   return lst;  
  70.  }  
  71.  
  72.    
  73.  public void saveDataToXML(OutputStream os, List lst) throws Exception  
  74.  {  
  75.   XmlSerializer xs = Xml.newSerializer();  
  76.   xs.setOutput(os, "UTF-8");  
  77.   xs.startDocument("UTF-8"true);  
  78.   xs.startTag(null"people");  
  79.   for (Person p : lst)  
  80.   {  
  81.    xs.startTag(null"person");  
  82.    xs.attribute(null"person", p.getId());  
  83.  
  84.    xs.startTag(null"name");  
  85.    xs.text(p.getName());  
  86.    xs.endTag(null"name");  
  87.  
  88.    xs.startTag(null"age");  
  89.    xs.text(p.getAge().toString());  
  90.    xs.endTag(null"age");  
  91.  
  92.    xs.endTag(null"person");  
  93.   }  
  94.   xs.endTag(null"people");  
  95.   xs.endDocument();  
  96.   os.flush();  
  97.   os.close();  
  98.  }  
  99. }  
  100.  
  101.    
  102.  
  103. public class TestClass extends AndroidTestCase  
  104. {  
  105.  public void testPeople() throws Exception  
  106.  {  
  107.   PersonService ps = new PersonService();  
  108.   InputStream xml = this.getClass().getClassLoader().getResourceAsStream("person.xml");  
  109.   List lst = ps.getPeople(xml);  
  110.   Assert.assertEquals("XY1", lst.get(0).getName());  
  111.  }  
  112.  
  113.  public void testSave() throws Exception  
  114.  {  
  115.   PersonService ps = new PersonService();  
  116.   List lst = new ArrayList();  
  117.   lst.add(new Person("0001""XY0001"20));  
  118.   lst.add(new Person("0002""XY0002"20));  
  119.   File xmlFile = new File(this.getContext().getFilesDir(), "xy.xml"); // data/data/package name/files  
  120.   OutputStream os = new FileOutputStream(xmlFile);  
  121.   ps.saveDataToXML(os, lst);  
  122.  }  
  123. }  

 

本文参考自金旭亮老师的《.NET 4.0面向对象编程漫谈》有关代理的内容

本文转自IT徐胖子的专栏博客51CTO博客,原文链接http://blog.51cto.com/woshixy/1079595如需转载请自行联系原作者


woshixuye111

相关文章
|
12月前
|
存储 Java 文件存储
微服务——SpringBoot使用归纳——Spring Boot使用slf4j进行日志记录—— logback.xml 配置文件解析
本文解析了 `logback.xml` 配置文件的详细内容,包括日志输出格式、存储路径、控制台输出及日志级别等关键配置。通过定义 `LOG_PATTERN` 和 `FILE_PATH`,设置日志格式与存储路径;利用 `&lt;appender&gt;` 节点配置控制台和文件输出,支持日志滚动策略(如文件大小限制和保存时长);最后通过 `&lt;logger&gt;` 和 `&lt;root&gt;` 定义日志级别与输出方式。此配置适用于精细化管理日志输出,满足不同场景需求。
2795 1
|
10月前
|
Android开发 开发者
Android自定义View之不得不知道的文件attrs.xml(自定义属性)
本文详细介绍了如何通过自定义 `attrs.xml` 文件实现 Android 自定义 View 的属性配置。以一个包含 TextView 和 ImageView 的 DemoView 为例,讲解了如何使用自定义属性动态改变文字内容和控制图片显示隐藏。同时,通过设置布尔值和点击事件,实现了图片状态的切换功能。代码中展示了如何在构造函数中解析自定义属性,并通过方法 `setSetting0n` 和 `setbackeguang` 实现功能逻辑的优化与封装。此示例帮助开发者更好地理解自定义 View 的开发流程与 attrs.xml 的实际应用。
276 2
Android自定义View之不得不知道的文件attrs.xml(自定义属性)
|
12月前
|
XML JavaScript Android开发
【Android】网络技术知识总结之WebView,HttpURLConnection,OKHttp,XML的pull解析方式
本文总结了Android中几种常用的网络技术,包括WebView、HttpURLConnection、OKHttp和XML的Pull解析方式。每种技术都有其独特的特点和适用场景。理解并熟练运用这些技术,可以帮助开发者构建高效、可靠的网络应用程序。通过示例代码和详细解释,本文为开发者提供了实用的参考和指导。
446 15
|
12月前
|
监控 Shell Linux
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) 系统信息获取如屏幕截图和录屏。通过这些功能,用户可高效调试和管理安卓设备。
|
存储 Linux API
深入探索Android系统架构:从内核到应用层的全面解析
本文旨在为读者提供一份详尽的Android系统架构分析,从底层的Linux内核到顶层的应用程序框架。我们将探讨Android系统的模块化设计、各层之间的交互机制以及它们如何共同协作以支持丰富多样的应用生态。通过本篇文章,开发者和爱好者可以更深入理解Android平台的工作原理,从而优化开发流程和提升应用性能。
|
Java Android开发 存储
Android 文件操作心得体会
android 的文件操作说白了就是Java的文件操作的处理。所以如果对Java的io文件操作比较熟悉的话,android的文件操作就是小菜一碟了。好了,话不多说,开始今天的正题吧。
1083 0
|
Android开发
android 文件操作
详细介绍:http://wenku.baidu.com/view/fcf6d3f47c1cfad6195fa724.html?from=rec&pos=0&weight=14&lastweight=1&count=5        /**          * 在SD卡上创建文件  ...
842 0
|
5月前
|
移动开发 前端开发 Android开发
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
753 12
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡

推荐镜像

更多
  • DNS