您的位置:首页 > 其它

使用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();

}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: