Android XmlPullParser 笔记
使用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 笔记的更多相关文章
- 【转】Android开发笔记(序)写在前面的目录
原文:http://blog.csdn.net/aqi00/article/details/50012511 知识点分类 一方面写写自己走过的弯路掉进去的坑,避免以后再犯:另一方面希望通过分享自己的经 ...
- 【转】 Pro Android学习笔记(七十):HTTP服务(4):SOAP/JSON/XML、异常
目录(?)[-] SOAP JSON和XMLPullParser Exception处理 文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件,转载须注明出处:http://blog. ...
- 【转】Pro Android学习笔记(四):了解Android资源(下)
处理任意的XML文件 自定义的xml文件放置在res/xml/下,可以通过R.xml.file_name来获取一个XMLResourceParser对象.下面是xml文件的例子: <rootna ...
- 【转】Pro Android学习笔记(三):了解Android资源(上)
在Android开发中,资源包括文件或者值,它们和执行应用捆绑,无需在源代码中写死,因此我们可以改变或替换他们,而无需对应用重新编译. 了解资源构成 参考阅读Android学习笔记(三八):资源res ...
- android 应用笔记
android 应用笔记 android 应用笔记 小书匠 Android 综合教程 Android常用技巧 安卓系统架构 安卓源码开发 安卓驱动 Linux内核 安卓应用开发 Java 教程 tic ...
- Android 学习笔记之Volley(七)实现Json数据加载和解析...
学习内容: 1.使用Volley实现异步加载Json数据... Volley的第二大请求就是通过发送请求异步实现Json数据信息的加载,加载Json数据有两种方式,一种是通过获取Json对象,然后 ...
- Android开发笔记:打包数据库
对于数据比较多的控制一般会加入SQLite数据库进行数据存储,在打包时这些数据库是不自动打包到apk中的,如何创建数据库呢 方法1:将创建数据库的sql语句在SQLiteHelper继承类中实现,在第 ...
- Android学习笔记进阶之在图片上涂鸦(能清屏)
Android学习笔记进阶之在图片上涂鸦(能清屏) 2013-11-19 10:52 117人阅读 评论(0) 收藏 举报 HandWritingActivity.java package xiaos ...
- android学习笔记36——使用原始XML文件
XML文件 android中使用XML文件,需要开发者手动创建res/xml文件夹. 实例如下: book.xml==> <?xml version="1.0" enc ...
随机推荐
- [转]关于几本模拟IC设计书
1.P.R.Gray的书 这本书被业界誉为模拟IC的Bible,盛名之下,必无虚士.现在已经出到第四版,作者无一例外是业界大牛,该书论述严谨,思路清晰,对电路分析透彻,定义严格明确,无愧Bible之名 ...
- 离线安装 Ambari Hadoop
制作本地yum源 安装步骤: 先建立本地yum源(Ambari和HDP的) 1. 先安装 ambari 然后http://localhost:8080 登录进去,设置 hdp的源链接. 2. 安装HD ...
- 鼠标经过显示二级菜单的js特效
本文章来给大家推荐一个不错的鼠标经过显示二级菜单js特效效果,有需要了解的朋友可以参考一下 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 T ...
- 怎样用modelsim做后仿真
摘要: 怎样用modelsim做后仿(编译工具采用quatus) step1:在qurtus改变编译选项: assignments->EDA tool setting:选择verilog ...
- Diamond 3.5简易教程(二)------软件的简单使用
二.软件的简单使用 工程建立后我们就可以进行程序的编写添加了. 选择左下角file list 选项卡 这里主要是工程的信息. 在input files 上右键弹出选项addànew file... 在 ...
- Java项目(5)——单例模式的应用与研究
单例模式是非常别致的一个模式,非常少有人拿它跟其它模式相比,由于,单例模式非常easy,非常特别,作用就是保证一个类有唯一一个实例,并让一个全局变量使得它能被訪问.而保证这个类仅仅被实例化一次的办法就 ...
- application , application pool., W3wp ,httpapplication, domain
Hosting and Consuming WCF Services https://msdn.microsoft.com/en-us/library/bb332338.aspx http://www ...
- Oracle PLSQL Demo - 19.管道function[查询整表组成list管道返回]
create or replace function function_demo RETURN emp PIPELINED as Type ref_cur_emp IS REF CURSOR RETU ...
- How to Reuse Old PCs for Solr Search Platform?
家裡或公司的舊電腦不夠力? 效能慢到想砸爛它們? 朋友或同事有電腦要丟嗎? 我有一個廢物利用的方法, 我收集了四台舊電腦, 組了一個Fully Distributed Mode的Hadoop Clus ...
- js冒泡事件
一.什么是事件冒泡 在一个对象上触发某类事件(比如单击onclick事件),如果此对象定义了此事件的处 理程序,那么此事件就会调用这个处理程序,如果没有定义此事件处理程序或者事件返回true,那么这个 ...