使用XmlPullParser解析xml文件。

要解析的xml文件如下所示。

weather.xml

<?xml version="1.0" encoding="utf-8"?>
<info>
<city id="1">
<name>Shenzhen</name>
<temp>30</temp>
</city>
<city id="2">
<name>Beijing</name>
<temp>20</temp>
</city>
</info>

XmlPullParser的next()移动到下一个节点。

XmlPullParser的nextText()获取节点的值。

getAttributeValue(null, "id")根据属性名称获取节点中属性的值.第一个参数一般是null,第二个参数是属性名称。

MainActivity.java如下所示。

package com.example.xmlpullparsertest;

import android.content.res.XmlResourceParser;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.widget.Toast; import org.xmlpull.v1.XmlPullParser; import java.util.ArrayList;
import java.util.List; public class MainActivity extends AppCompatActivity { @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); WeatherInfo weatherInfo = null;
// 保存多个节点的列表
List<WeatherInfo> infos = null;
// 获取xml文件
XmlPullParser xmlPullParser = getResources().getXml(R.xml.weather);
try {
//getEventType()方法返回XMLStreamConstants接口中定义的一个标记常量,表示当前指针所指向标记(或事件)的类型
int mEventType = xmlPullParser.getEventType();
while (mEventType != XmlPullParser.END_DOCUMENT) {
switch (mEventType) {
case XmlPullParser.START_DOCUMENT:
break;
case XmlPullParser.START_TAG:
// 判断是否是"info"节点
if ("info".equals(xmlPullParser.getName())) {
infos = new ArrayList<WeatherInfo>();
}
else if ("city".equals(xmlPullParser.getName())) {
weatherInfo = new WeatherInfo();
// 通过属性名称获取节点属性的值
// 获取"city"节点的”id“属性的值
String id = xmlPullParser.getAttributeValue(null, "id");
weatherInfo.setId(Integer.parseInt(id));
}
else if ("name".equals(xmlPullParser.getName())) {
// 获取节点的值
String str = xmlPullParser.nextText();
weatherInfo.setName(str);
}
else if ("temp".equals(xmlPullParser.getName())) {
// 后去temp节点对应的值
String str = xmlPullParser.nextText();
weatherInfo.setTemp(str);
}
break;
case XmlPullParser.END_TAG:
// 根据END_TAG,将获取的信息添加到Array中
if ("city".equals((xmlPullParser.getName()))) {
infos.add(weatherInfo);
weatherInfo = null;
}
break;
}
// 移动到下一个节点,继续解析
mEventType = xmlPullParser.next();
}
} catch (Exception e) {
Toast.makeText(this, "fail", Toast.LENGTH_SHORT);
}
// 查看
for(WeatherInfo tmp:infos) {
Toast.makeText(this, tmp.getId() + " " + tmp.getName()+ " " + tmp.getTemp(), Toast.LENGTH_SHORT).show();
}
}
}

Tony Liu

2017-3-20, Shenzhen

Android XmlPullParser 笔记的更多相关文章

  1. 【转】Android开发笔记(序)写在前面的目录

    原文:http://blog.csdn.net/aqi00/article/details/50012511 知识点分类 一方面写写自己走过的弯路掉进去的坑,避免以后再犯:另一方面希望通过分享自己的经 ...

  2. 【转】 Pro Android学习笔记(七十):HTTP服务(4):SOAP/JSON/XML、异常

    目录(?)[-] SOAP JSON和XMLPullParser Exception处理 文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件,转载须注明出处:http://blog. ...

  3. 【转】Pro Android学习笔记(四):了解Android资源(下)

    处理任意的XML文件 自定义的xml文件放置在res/xml/下,可以通过R.xml.file_name来获取一个XMLResourceParser对象.下面是xml文件的例子: <rootna ...

  4. 【转】Pro Android学习笔记(三):了解Android资源(上)

    在Android开发中,资源包括文件或者值,它们和执行应用捆绑,无需在源代码中写死,因此我们可以改变或替换他们,而无需对应用重新编译. 了解资源构成 参考阅读Android学习笔记(三八):资源res ...

  5. android 应用笔记

    android 应用笔记 android 应用笔记 小书匠 Android 综合教程 Android常用技巧 安卓系统架构 安卓源码开发 安卓驱动 Linux内核 安卓应用开发 Java 教程 tic ...

  6. Android 学习笔记之Volley(七)实现Json数据加载和解析...

    学习内容: 1.使用Volley实现异步加载Json数据...   Volley的第二大请求就是通过发送请求异步实现Json数据信息的加载,加载Json数据有两种方式,一种是通过获取Json对象,然后 ...

  7. Android开发笔记:打包数据库

    对于数据比较多的控制一般会加入SQLite数据库进行数据存储,在打包时这些数据库是不自动打包到apk中的,如何创建数据库呢 方法1:将创建数据库的sql语句在SQLiteHelper继承类中实现,在第 ...

  8. Android学习笔记进阶之在图片上涂鸦(能清屏)

    Android学习笔记进阶之在图片上涂鸦(能清屏) 2013-11-19 10:52 117人阅读 评论(0) 收藏 举报 HandWritingActivity.java package xiaos ...

  9. android学习笔记36——使用原始XML文件

    XML文件 android中使用XML文件,需要开发者手动创建res/xml文件夹. 实例如下: book.xml==> <?xml version="1.0" enc ...

随机推荐

  1. java 又一次抛出异常 相关处理结果演示样例代码

    java 又一次抛出异常 相关处理结果演示样例代码 package org.rui.ExceptionTest; /** * 又一次抛出异常 * 在某些情况下,我们想又一次掷出刚才产生过的违例,特别是 ...

  2. Spring的三种注入方式(Setter、构造函数和自动注入)

    一.Setter注入 这里我是希望在Student.java中调用Course.java中的内容. public class Course { public String name = "数 ...

  3. Redis(五):几个常用概念

    1.Redis 默认有16384 solts(槽),每个槽可以存储多个hash值. 2.Redis 默认不需要密码: 2.1 注释去掉,设置自己的密码 3.设置密码后需要通过 3.1 -h 主机ip ...

  4. 自己动手写shell命令之write

    Linux下write命令同意用户跟其它终端上的用户对话.用c语言实现shell命令write.代码例如以下: #include <stdio.h> #include <fcntl. ...

  5. 练习 Dijkstra 最短路径算法。

    练习 Dijkstra 最短路径算法. #coding: utf-8 # Author: woodfox, Oct 14, 2014 # http://en.wikipedia.org/wiki/Di ...

  6. uva--242(邮资问题 dp)

    输入输出: id=26127" style="color:blue; text-decoration:none">Sample Input 5 2 4 1 4 12 ...

  7. jvm 性能调优 经验总结---转

    最近因项目存在内存泄漏,故进行大规模的JVM性能调优 , 现把经验做一记录. 一.JVM内存模型及垃圾收集算法 1.根据Java虚拟机规范,JVM将内存划分为: New(年轻代) Tenured(年老 ...

  8. zookeeper 安装 配置集群

    https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/ [root@znode01 src]# tar -xzvf zookeeper--alph ...

  9. python学习之base64模块

    常见方法: base64.encodebytes() 参数: 接收一个字节对象. 返回值: 返回base64编码的数据(以'\n'结尾的数据). base64.decodebytes() 参数: 接收 ...

  10. Eclipse build error 解决方法The library '*.jar' contains native libraries that will not run on the dev

    [2013-08-29 16:56:58 - jarsotest] The library 'wnp.jar' contains native libraries that will not run ...