xml文件可以用户储存我们的数据,或者作为配置文件等。xml文件可以位于res/xml目录下面,例如我们在该目录下放置一个xml文件words.xml,如下:

[html] view plaincopy
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <ListItems desrciption="Put the entry as the item in Android List">
  3. <Entry value="One" />
  4. <Entry value="Two" />
  5. <Entry value="Three" />
  6. <Entry value="Four" />
  7. <Entry value="Five" />
  8. <Entry value="Six" />
  9. <entry>Hello</entry>
  10. </ListItems>

  XmlPullParser可以用于解释xml文件。这里有两种xml的常见格式:<entry>Hello</entry>和<Entry value="Six" />,在Android XML中使用后者,而这种方式在XmlPullParser中处理也非常方便。它的使用方式归纳如下:

  1. XmlPullParser通过next(),依次向下检查
  2. XmlPullParser是事件驱动,如果检测到END_DOCUMENT,应当停止继续检测
  3. XmlPullParser是事件驱动,当检测到START_TAG,可以读出<AAAA bbbb=xxxx c=yyyyy>的内容,其中AAAA可通过getName()来获取,属性的个数,可通过getAttributeCount()获取,属性的名词和内容可分别通过getAttributeName(index)和getAttributeValue(index)来获取。
  4. XmlPullParser是事件驱动,如果是END_TAG,则为</AAAA>,可以通过getName()来获得AAAA的内容
  5. 对于<entry>Hello</entry>这种方式,如果要获取中间的数值,则事件为XmlPullParser.TEXT,可通过getText()来获取内容。
  6. 由于xml文件可能书写不正确,或者我们在解释的过程中处理不正确,应当使用异常捕获的方式来处理

下面的例子,我们将上述的words.xml分析处理,将Entry数值作为listActivity的每个item的内容。

[java] view plaincopy
  1. /* 1. XmlPullParser通过next(),依次向下检查
  2. * 2. XmlPullParser是事件驱动,如果检测到 END_DOCUMENT,应当停止继续检测
  3. * 3. XmlPullParser是事件驱动,当检测到START_TAG,可以读出<AAAA bbbb=xxxx c=yyyyy>的内容,其中AAAA可通过getName()来获取,属性的个数,可通过getAttributeCount()获取,属性的名词和内容可分别通过getAttributeName(index)和getAttributeValue(index)来获取。
  4. * 4. XmlPullParser 是事件驱动,如果是END_TAG,则为</AAAA>,可以通过getName()来获得AAAA的内容
  5. * 5. 对于<entry>Hello</entry>这种方式,如果要获取中间的数值,则事件为XmlPullParser.TEXT, 可通过getText()来获取内容。
  6. * 6. 由于xml文件可能书写不正确,或者我们在解释的过程中处理不正确,应当使用异常捕获的方式来处理
  7. */
  8. public class Chapter20Test3 extends ListActivity{
  9. private ArrayList<String> items = new ArrayList<String>();
  10. protected void onCreate(Bundle savedInstanceState) {
  11. super.onCreate(savedInstanceState);
  12. /*步骤1:进行特定xml文件words的解析,对应第6点,应采用异常捕获防止程序出错*/
  13. try{
  14. /* 步骤2:获取xml文件,并给给出XmlPullParser对象*/
  15. XmlPullParser xpp = getResources().getXml(R.xml.words);
  16. /* 步骤3:通过循环,逐步解析XML,直至xml文件结束,对应第1点和第2点*/
  17. while(xpp.getEventType()!=XmlPullParser.END_DOCUMENT){
  18. /* 步骤4:获取目标ListItems的解析,并将之用method:ListItems来处理,对应第3点 */
  19. if(xpp.getEventType() == XmlPullParser.START_TAG){
  20. if(xpp.getName().equals("ListItems")){
  21. getItems(xpp);
  22. }
  23. }
  24. xpp.next();
  25. }
  26. }catch(Throwable t){
  27. Toast.makeText(this, "Failed:" + t.toString(), 2000).show();
  28. }
  29. setListAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,items));
  30. }
  31. /* 解析<ListItems ... >.... </Listitem>的内容,获取每个entry的value的值,注意对异常的处理*/
  32. private void getItems(XmlPullParser xpp) throws Throwable{
  33. while(true){
  34. xpp.next();
  35. /*<ListItems> ...</ListItems>的内容已经检索完毕,或者文件结束,都退出处理*/
  36. if((xpp.getEventType() == XmlPullParser.END_TAG && xpp.getName().equals("ListItems"))
  37. || xpp.getEventType() == XmlPullParser.END_DOCUMENT)
  38. break;
  39. if(xpp.getEventType()==XmlPullParser.START_TAG) {
  40. /*观测点:对第3点的处理,读出属性的名字和数值*/
  41. if(xpp.getName().equals("Entry")){
  42. for(int i = 0; i < xpp.getAttributeCount() ; i ++){
  43. if(xpp.getAttributeName(i).equals("value")){
  44. items.add(xpp.getAttributeValue(i));
  45. }
  46. }
  47. }
  48. /*观测点:对第5点的处理,处理<name>value</name>*/
  49. if(xpp.getName().equals("entry")){
  50. xpp.next();
  51. if(xpp.getEventType()==XmlPullParser.TEXT)
  52. items.add(xpp.getText());
  53. }
  54. }
  55. }
  56. }
  57. @Override
  58. protected void onListItemClick(ListView l, View v, int position, long id) {
  59. super.onListItemClick(l, v, position, id);
  60. Toast.makeText(this, items.get(position), Toast.LENGTH_LONG).show();
  61. }
  62. }

XmlPullParser相关推荐

  1. Android 使用XmlPullParser解析xml

    这里我们假设要解析的xml文件名为:test.xml,我们将其放在assets路径中. xml文件内容为: <?xml version='1.0' encoding='utf-8' standa ...

  2. 使用XmlPullParser

    一.工作原理 二.实现 private static final String XML_PHOTO= "photo"; void parseItems(ArrayList<G ...

  3. 使用XmlPullParser解析XML

    在XML解析和使用原始XML资源中都涉及过对XML的解析,之前使用的是DOM4J和XmlResourceParser来解析的.本文中将使用XmlPullParser来解析,分别解析不同复杂度的test ...

  4. Android XmlPullParser 笔记

    使用XmlPullParser解析xml文件. 要解析的xml文件如下所示. weather.xml <?xml version="1.0" encoding="u ...

  5. XmlPullParser文件解析android

    XmlPullParser文件解析android 1. 解析demo package com.glsite.pulldemo;import android.support.v7.app.AppComp ...

  6. Android XML解析器– XMLPullParser

    Welcome to android xml parser example using XMLPullParser. We will have a sample XML file that we wi ...

  7. android xmlpullparser 编译出错,将Android支持库更新为23.2.0导致错误:XmlPullParserException...

    我尝试将支持库更新到23.2.0并遇到此错误: Exception while inflating org.xmlpull.v1.XmlPullParserException: Binary XML ...

  8. java 使用XmlPullParser解析Excel2007中日期格式的转换

    Excel2007在日期格式上是以double类型存储的,例如日期为2018-06-13,在xml中表示为43264. 使用java解析excel的xml文件时,会发现,获取到的值依旧是43264,毕 ...

  9. Android客户端开发—开源数据库框架LitePal

    LitePal是一款开源的Android数据库框架,采用对象关系映射(ORM)模式,将常用的数据库功能进行封装,不使用SQL语句就可以完成创建表以及表单的CRUD操作,并且很轻量级,几乎零配置.(它将 ...

最新文章

  1. linux命令之高级使用 find
  2. 2021暑假实习-SSM超市积分管理系统-day06笔记
  3. VTK:模型用法实战
  4. 四中方式实现单例模式
  5. QuickSkin简单学习--控制结构
  6. FPGA图像处理的开发流程
  7. .NET5.0 Preview 8 开箱教程
  8. 踩方格(信息学奥赛一本通-T1196)
  9. java.util.zip.zipexception_Java 压缩zip异常,java.util.zip.ZipException: duplicate entry: 问题...
  10. java商品信息管理系统代码_[源码分享]学生信息管理系统(管理员)
  11. python代码读取外部变量_在Python中从外部文件中写入和读取特定的变量
  12. VMware Fusion Player 个人免费版
  13. 【倒计时1天】PPP全球数字资产投资峰会-中国区北京首站之金融科技区块链支持可持续发展...
  14. html中如何引用其外部字体,css引入外部字体
  15. 仓央嘉措经典语句分享
  16. 我用ChatGPT做直播技术选型,卷死了同事
  17. 李嘉诚长江商学院演讲汇总:大时代下的商道
  18. 4.Vue项目中下载本地pd、word、excel文件
  19. 戴尔+VMware:强强联手,共赴“云原生”新征程
  20. 输入数字进入登录系统

热门文章

  1. box2d 碰撞检测_(译)如何使用box2d来做碰撞检测(且仅用来做碰撞检测)
  2. oracle 赋值到cmd,CMD操作oracle数据导库过程图解
  3. python 数组 运算_python数据分析(二) python numpy--数组和矢量运算--数组对象
  4. php跨域资源共享,CORS 跨域资源共享
  5. ROS-URDF仿真
  6. Node_初步了解(4)小爬虫
  7. 制作mac系统安装U盘
  8. C# 之 Math取整
  9. The Child and Sequence
  10. oracle-单行函数