利用pull方式进行xml文件查看天气

1.需要使用到的java文件

解析china.xml文件中的内容。

利用pull方式进行xml文件步骤:

①直接创建出XmlPullParser解析器对象  XmlPullParser xmlPullParser = Xml.newPullParser();

②设置解析的文件输入流 并且制定输入流在操作方式中的编码方式    xmlPullParser.setInput(getClass().getClassLoader().getResourceAsStream("china.xml"), "UTF-8");

③获取解析文件时返回的EventType

④利用XmlPullParser中自带的START_DOCUMENT、END_DOCUMENT、START_TAG、END_TAG定值进行判断和赋值

注意:获取标签及标签中的对象在START_TAG方法中进行,而在END_TAG中即标签结束后将当前属性添加到集合中。

2.xml文件的格式有两种:

1)第一种如下:

<city
        cityname="南京"     
        pyName="jiangsu"
        quName="江苏"
        state1="1"
        state2="1"
        stateDetailed="多云"
        tem1="24"
        tem2="19"
        windState="西北风3-4级" />
    <city
        cityname="北京"     
        pyName="beijing"
        quName="北京"
        state1="1"
        state2="1"
        stateDetailed="多云"
        tem1="24"
        tem2="14"
        windState="西北风4-5级" />

2)第二种如下:

<city>
        <cityname>长沙</cityname>
        <pyName>hunan</pyName>
        <quName>湖南</quName>
        <state1>1</state1>
        <state2>1</state2>
        <stateDetailed>晴</stateDetailed>
        <tem1>23</tem1>
        <tem2>34</tem2>
        <windState>东南风2-3级</windState>
    </city>

3.第一种xml格式的进行解析时使用如下方式:

String name = xmlPullParser.getName();
if (name.equals("city")) {
	// 声明当前的city对象
	currentCity = new City();
	int count = xmlPullParser.getAttributeCount();
	// System.out.println("个数:::::"+count);
	if (count > 0) {
	// 给当前的city对象赋值
		currentCity.setCityName(xmlPullParser.getAttributeValue(null, "cityname"));
		currentCity.setPyName(xmlPullParser.getAttributeValue(null, "pyName"));
		currentCity.setQuName(xmlPullParser.getAttributeValue(null, "quName"));
		currentCity.setState1(xmlPullParser.getAttributeValue(null, "state1"));
		currentCity.setStateDetailed(xmlPullParser.getAttributeValue(null, "stateDetailed"));
		currentCity.setTem1(xmlPullParser.getAttributeValue(null, "tem1"));
		currentCity.setTem2(xmlPullParser.getAttributeValue(null, "tem2"));
		currentCity.setWindState(xmlPullParser.getAttributeValue(null, "windState"));
	}

} 

4.第二种xml格式的进行解析时使用如下方式:

if (currentCity != null) {
	if (name.equalsIgnoreCase("cityname")) {
		currentCity.setCityName(xmlPullParser.nextText());
	} else if (name.equalsIgnoreCase("pyName")) {
		currentCity.setPyName(xmlPullParser.nextText());
	} else if (name.equalsIgnoreCase("quName")) {
		currentCity.setQuName(xmlPullParser.nextText());
	} else if (name.equalsIgnoreCase("state1")) {
		currentCity.setState1(xmlPullParser.nextText());
	} else if (name.equalsIgnoreCase("state1")) {
		currentCity.setState2(xmlPullParser.nextText());
	} else if (name.equalsIgnoreCase("stateDetailed")) {
		currentCity.setStateDetailed(xmlPullParser.nextText());
	} else if (name.equalsIgnoreCase("tem1")) {
		currentCity.setTem1(xmlPullParser.nextText());
	} else if (name.equalsIgnoreCase("tem2")) {
		currentCity.setTem2(xmlPullParser.nextText());
	} else if (name.equalsIgnoreCase("windState")) {
		currentCity.setWindState(xmlPullParser.nextText());
}

5.利用pull方式解析xml文件查看天气界面的搭建和DOM方式还有SAX方式是一样的,查看的方式也几乎相似,参照:

http://blog.csdn.net/xia09222826/article/details/28434189或者http://blog.csdn.net/xia09222826/article/details/28383941

说明:界面搭建时,可以使用RadioGroup(按钮群)或者spinner插件进行城市的选择。

按钮的方式结果如图:
利用pull方式进行xml文件查看天气_第1张图片

利用pull方式进行xml文件相关的代码:

package www.csdn.net.xml;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;

import android.util.Log;
import android.util.Xml;
import domain.City;

public class PullXml {

	private static final String TAG = "PullXml";

	public List<City> pullXml() {
		List<City> entities = null;
		City currentCity = null;
		// 直接创建出XmlPullParser解析器对象
		XmlPullParser xmlPullParser = Xml.newPullParser();

		try {
			// 设置解析的文件输入流 并且制定输入流在操作方式中的编码方式
			xmlPullParser.setInput(getClass().getClassLoader()
					.getResourceAsStream("china.xml"), "UTF-8");
			// 获取解析文件时返回的EventType
			int eventType = xmlPullParser.getEventType();
			while (eventType != XmlPullParser.END_DOCUMENT) {
				switch (eventType) {
				case XmlPullParser.START_DOCUMENT:
					entities = new ArrayList<>();
					Log.i(TAG, "----startdocument-----");
					break;
				case XmlPullParser.START_TAG:
					// 获取标签名
					String name = xmlPullParser.getName();
					if (name.equals("city")) {
						// 声明当前的city对象
						currentCity = new City();
						int count = xmlPullParser.getAttributeCount();
						// System.out.println("个数:::::"+count);
						if (count > 0) {
							// 给当前的city对象赋值
							currentCity.setCityName(xmlPullParser
									.getAttributeValue(null, "cityname"));
							currentCity.setPyName(xmlPullParser
									.getAttributeValue(null, "pyName"));
							currentCity.setQuName(xmlPullParser
									.getAttributeValue(null, "quName"));
							currentCity.setState1(xmlPullParser
									.getAttributeValue(null, "state1"));
							currentCity.setStateDetailed(xmlPullParser
									.getAttributeValue(null, "stateDetailed"));
							currentCity.setTem1(xmlPullParser
									.getAttributeValue(null, "tem1"));
							currentCity.setTem2(xmlPullParser
									.getAttributeValue(null, "tem2"));
							currentCity.setWindState(xmlPullParser
									.getAttributeValue(null, "windState"));
						}

					} else if (currentCity != null) {
						if (name.equalsIgnoreCase("cityname")) {
							currentCity.setCityName(xmlPullParser.nextText());
						} else if (name.equalsIgnoreCase("pyName")) {
							currentCity.setPyName(xmlPullParser.nextText());
						} else if (name.equalsIgnoreCase("quName")) {
							currentCity.setQuName(xmlPullParser.nextText());
						} else if (name.equalsIgnoreCase("state1")) {
							currentCity.setState1(xmlPullParser.nextText());
						} else if (name.equalsIgnoreCase("state1")) {
							currentCity.setState2(xmlPullParser.nextText());
						} else if (name.equalsIgnoreCase("stateDetailed")) {
							currentCity.setStateDetailed(xmlPullParser
									.nextText());
						} else if (name.equalsIgnoreCase("tem1")) {
							currentCity.setTem1(xmlPullParser.nextText());
						} else if (name.equalsIgnoreCase("tem2")) {
							currentCity.setTem2(xmlPullParser.nextText());
						} else if (name.equalsIgnoreCase("windState")) {
							currentCity.setWindState(xmlPullParser.nextText());
						}
					}
					//Log.i(TAG, "----starttag-----" + name);
					break;
				case XmlPullParser.END_TAG:
					//String name2 = xmlPullParser.getName();
					//标签结束时添加到集合中
					if (xmlPullParser.getName().equalsIgnoreCase("city")
							&& currentCity != null) {
						// 将当前属性添加到集合中
						entities.add(currentCity);
						currentCity= null;
					}
					//Log.i(TAG, "----endtag-----" + name2);
					break;
				}
				eventType = xmlPullParser.next();

			}
		} catch (XmlPullParserException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return entities;
	}

}


 

 

你可能感兴趣的:(利用pull方式进行xml文件查看天气)