使用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. Win2008 r2 IIS7.5出现FastCGI进程最近常常失败。请过一会再尝试此请求的解决方法

    错误信息如图所示: 应用程序“PIAOYUN.CC”中的服务器错误Internet Information Services 7.5 错误摘要HTTP 错误 500.0 - Internal Serv ...

  2. python函数中参数是如何传递的?

    python中一切皆对象,函数中参数传递的是对象的引用. 1在函数中改变变量指向的对象,即指向不同对象. 当在函数中修改传递进来的变量指向另一个对象时,实参的对象不会改变. >>> ...

  3. C 常量指针和指针常量

    * (指针)和 const(常量) 谁在前先读谁 :*象征着地址,const象征着内容:谁在前面谁就不允许改变. 例子: ; ; ; int const *p1 = &b;//const 在前 ...

  4. [na]pc加入域认证细节

    这也是以前好奇,因为学生时候,经常机房上网, 对一些譬如.. 现在看来很low了. 是小作坊式的技术, 真正上不了台面的.扛不住生产的压力. ftp共享 计算机统一管理等 无盘/网克等特别好奇 计算机 ...

  5. 【Android】3.24 示例24--OpenGL绘制功能

    分类:C#.Android.VS2015.百度地图应用: 创建日期:2016-02-04 一.简介 百度地图SDK为广大开发者开放了OpenGL绘制接口,帮助开发者在地图上实现更灵活的样式绘制,丰富地 ...

  6. Spring-两种配置容器

    Spring提供了两种容器类型       SpringIOC容器是一个IOC Service Provider.提供了两种容器类型:BeanFactory和ApplicationContext.Sp ...

  7. vue 阅读一【待完结】

    初步方案:从第一个commit开始到到最近的commit,从代码的大纲开始到细节,利用思维导图. 注意: 源码阅读是一件比较枯燥的事情,要有别的东西一起做,源码只是偶尔看看,经常发呆的话,非常浪费时间 ...

  8. [原]零基础学习SDL开发之在Android使用SDL2.0显示BMP图

    关于如何移植SDL2.0到安卓上面来参考我的上一篇文章:[原]零基础学习SDL开发之移植SDL2.0到Android 在一篇文章我们主要使用SDL2.0来加载一张BMP图来渲染显示. 博主的开发环境: ...

  9. 如何读取jar包外的properties文件和log4j.properties

    http://jrails.iteye.com/blog/1705464 ***************************************' 一般在项目中使用properties配置文件 ...

  10. 复习,关于server.xml的一点理解

    刚才在思考,我所写的一些java代码存放在了eclipse的一个workspace的目录下,这个目录下还包含我的web-project的所有html和jsp文件,以及/WEB-ROOT/WEB-INF ...