使用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. Python2 字典 has_key() 方法

    描述 Python2 字典 has_key() 方法用于判断键(key)是否存在于字典(D)中,如果键在字典中返回True,否则返回False. 官方文档推荐用 in 操作符,因为它更短更通俗易懂.h ...

  2. Python floor() 函数

    描述 floor(x) 函数返回一个小于或等于 x 的的最大整数(向下取整) 语法 以下是 floor() 方法的语法: import math math.floor( x ) 注意:floor()是 ...

  3. mysql 数据表的引擎 MyISAM 和 InnoDB

    需要使用锁和事务时,必须使用InnoDB模式 可以通过以下语句查看表的类型 SHOW TABLE STATUS FROM [DATABASE_NAME] 修改数据表的引擎类型: navicat: 设计 ...

  4. Composer更新慢的终极解决方案

    Packagist 镜像 请各位使用本镜像的同学注意: 本镜像已经依照 composer 官方的数据源安全策略完全升级并支持 https 协议!请各位同学 按照下面所示的两个方法将  还没安装 Com ...

  5. mysql分组取每组前几条记录(排序)

    首先来造一部分数据,表mygoods为商品表,cat_id为分类id,goods_id为商品id,status为商品当前的状态位(1:有效,0:无效). CREATE TABLE `mygoods` ...

  6. spineRuntTime for cocos2dx v3,attack播完后回到idle

    spineRuntTime for cocos2dx v3,attack播完后回到idle. _animationNode = spine::SkeletonAnimation::createWith ...

  7. Spark部署配置

    前提是已经安装了Hadoop ============================ SetUp Spark=============================Configuration sp ...

  8. Transport level information does not match with SOAP Message namespace URI错误的理解

    理论知识: 转自:http://wso2.com/library/articles/differentiating-between-soap-versions-looking-soap-message ...

  9. java.net.SocketException: Software caused connection abort: socket write erro

    场景:接口测试 编辑器:eclipse 版本:Version: 2018-09 (4.9.0) testng版本:TestNG version 6.14.0 执行testng.xml时报错信息: 出现 ...

  10. 【Java】创建线程对象两种方式

    1.继承Thread类,重载run方法: Thread t = new Thread(new Runnable() { @Override public void run() { // TODO Au ...