使用pull解析器解析XML文件
2016-02-17 10:42
381 查看
在Android平台上可以使用Simple API for XML(SAX) 、 Document Object Model(DOM)和Android附带
的pull解析器解析XML文件。 以下讲解的是使用pull解析器来解析XML文件的实例。
1,下面是本例子要解析的XML文件city.xml(把此文件拷贝到src目录下):
<?xml version="1.0" encoding="utf-8" standalong="yes"?>
<weather>
<city>
<name>北京</name>
<temp>6*</temp>
<pm2.5>300</pm2.5>
</city>
<city>
<name>上海</name>
<temp>15*</temp>
<pm2.5>30</pm2.5>
</city>
<city>
<name>深圳</name>
<temp>16*</temp>
<pm2.5>30</pm2.5>
</city>
</weather>
2,创建解析后数据要封装到的javabean对象:
package com.example.pull.domain;
public class City {
private String name;
private String temp;
private String pm25;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getTemp() {
return temp;
}
public void setTemp(String type) {
this.temp = temp;
}
public String getPm25() {
return pm25;
}
public void setPm25(String pm25) {
this.pm25 = pm25;
}
public City(String name, String temp, String pm25) {
super();
this.name = name;
this.temp = temp;
this.pm25 = pm25;
}
public City() {
super();
}
@Override
public String toString() {
return "City [name=" + name + ", temp=" + temp + ", pm25=" + pm25 + "]";
}
}
3,使用pull解析器解析city.xml对象:
public class MainActivity extends Activity{
private List<City> cityList;
private City city;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.fragment_main);
}
//解析xml文件
public void doClick(View v){
//1,通过类加载器来拿到资源文件
InputStream is = getClassLoader().getResourceAsStream("city.xml");
//2,拿到解析器对象
XmlPullParser parser = Xml.newPullParser();
try {
//3,初始化解析器对象
parser.setInput(is, "utf-8");
//4,开始解析
//获取当前节点的事件类型(相当于指针)
int type = parser.getEventType();
while (type!=XmlPullParser.END_DOCUMENT) {
switch (type) {
case XmlPullParser.START_TAG:
if ("weather".equals(parser.getName())) {
//解析到开始节点(weather)时,初始化集合对象
cityList = new ArrayList<City>();
}
else if ("city".equals(parser.getName())) {
//解析到"city"节点时,初始化city对象
city = new City();
}
//解析"city"中的"name"
else if ("name".equals(parser.getName())) {
// 获取当前节点的下一个节点的文本
String name = parser.nextText();
city.setName(name);
}
//解析"city"中的"temp"
else if ("temp".equals(parser.getName())) {
// 获取当前节点的下一个节点的文本
String temp = parser.nextText();
city.setTemp(temp);
}
//解析"city"中的"pm25"
else if ("pm25".equals(parser.getName())) {
// 获取当前节点的下一个节点的文本
String pm25 = parser.nextText();
city.setPm25(pm25);
}
break;
case XmlPullParser.END_TAG:
//如果结束节点为“city”,把此city对象存入到集合中
if ("city".equals(parser.getName())) {
cityList.add(city);
}
break;
}
//当前节点解析后,指针下移,解析下一个节点
type = parser.next();
}
//打印输出解析的文件
for (City city : cityList) {
System.out.println(city.toString());
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
的pull解析器解析XML文件。 以下讲解的是使用pull解析器来解析XML文件的实例。
1,下面是本例子要解析的XML文件city.xml(把此文件拷贝到src目录下):
<?xml version="1.0" encoding="utf-8" standalong="yes"?>
<weather>
<city>
<name>北京</name>
<temp>6*</temp>
<pm2.5>300</pm2.5>
</city>
<city>
<name>上海</name>
<temp>15*</temp>
<pm2.5>30</pm2.5>
</city>
<city>
<name>深圳</name>
<temp>16*</temp>
<pm2.5>30</pm2.5>
</city>
</weather>
2,创建解析后数据要封装到的javabean对象:
package com.example.pull.domain;
public class City {
private String name;
private String temp;
private String pm25;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getTemp() {
return temp;
}
public void setTemp(String type) {
this.temp = temp;
}
public String getPm25() {
return pm25;
}
public void setPm25(String pm25) {
this.pm25 = pm25;
}
public City(String name, String temp, String pm25) {
super();
this.name = name;
this.temp = temp;
this.pm25 = pm25;
}
public City() {
super();
}
@Override
public String toString() {
return "City [name=" + name + ", temp=" + temp + ", pm25=" + pm25 + "]";
}
}
3,使用pull解析器解析city.xml对象:
public class MainActivity extends Activity{
private List<City> cityList;
private City city;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.fragment_main);
}
//解析xml文件
public void doClick(View v){
//1,通过类加载器来拿到资源文件
InputStream is = getClassLoader().getResourceAsStream("city.xml");
//2,拿到解析器对象
XmlPullParser parser = Xml.newPullParser();
try {
//3,初始化解析器对象
parser.setInput(is, "utf-8");
//4,开始解析
//获取当前节点的事件类型(相当于指针)
int type = parser.getEventType();
while (type!=XmlPullParser.END_DOCUMENT) {
switch (type) {
case XmlPullParser.START_TAG:
if ("weather".equals(parser.getName())) {
//解析到开始节点(weather)时,初始化集合对象
cityList = new ArrayList<City>();
}
else if ("city".equals(parser.getName())) {
//解析到"city"节点时,初始化city对象
city = new City();
}
//解析"city"中的"name"
else if ("name".equals(parser.getName())) {
// 获取当前节点的下一个节点的文本
String name = parser.nextText();
city.setName(name);
}
//解析"city"中的"temp"
else if ("temp".equals(parser.getName())) {
// 获取当前节点的下一个节点的文本
String temp = parser.nextText();
city.setTemp(temp);
}
//解析"city"中的"pm25"
else if ("pm25".equals(parser.getName())) {
// 获取当前节点的下一个节点的文本
String pm25 = parser.nextText();
city.setPm25(pm25);
}
break;
case XmlPullParser.END_TAG:
//如果结束节点为“city”,把此city对象存入到集合中
if ("city".equals(parser.getName())) {
cityList.add(city);
}
break;
}
//当前节点解析后,指针下移,解析下一个节点
type = parser.next();
}
//打印输出解析的文件
for (City city : cityList) {
System.out.println(city.toString());
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
相关文章推荐
- emoji 原生表情解析成对应表情包png
- org.apache.commons.dbcp.SQLNestedException: Cannot load JDBC driver class
- 常用的Mac OS X快捷键
- 枚举
- C# 程序员最常用的面试题及答案
- ListView item 之间加间距(Margin)
- 将会改变未来IT世界的十种编程语言
- MySQL数据库的安装
- 分享一统计信息的备份与恢复
- Android模拟器快捷键
- 【视觉控】3D时钟
- Apache和Nginx比较
- 关于html和jsp乱码问题
- 营销 - 数据
- 状态模式State(对象行为型)
- java中==、equals()、hashCode()
- [bzoj 1251]序列终结者
- 腾讯企业邮箱邮件正文存储型XSS一枚
- 解决SwipeRefreshLayout内嵌套ViewPager,造成的滑动冲突
- css动画和渐变