Android xml 解析
来源:互联网 发布:高中英语单词读音软件 编辑:程序博客网 时间:2024/06/05 20:04
XML 常用的三种解析方式:
DOM: 全部加载到内存,生成一个树状结构,占用内存比较大。
SAJ: 采用事件驱动,速度快,效率高,不支持回退。
PULL:也是采用事件驱动,语法简洁。
步骤:
1. 创建XML 解析器:XmlPullParser parser = Xml.newPullParser();
2. 配置解析器:parser.setInput(is, "utf-8");// 参数为 xml 文件输入流 和 编码方式。
3. 根据事件进行解析。
int type = parser.getEventType();// 得到事件类型 type = parser.next();// 获取下一个事件
事件类型:
XmlPullParser.END_DOCUMENT 文档末尾。
XmlPullParser.START_TAG 开始标签
XmlPullParser.END_TAG 结束标签
获取标签名字:parser.getName()
获取属性: String idStr = parser.getAttributeValue(0); // 参数为属性id。
获取标签内容:String temp = parser.nextText();
代码实例:
代码结构:
WeathreService.java
package com.serviatech.weather.service;import java.io.InputStream;import java.util.ArrayList;import java.util.List;import org.xmlpull.v1.XmlPullParser;import android.util.Xml;import com.serviatech.weather.domain.WeatherInfo;public class WeatherService {public static List<WeatherInfo> getWeatherInfos(InputStream is)throws Exception {List<WeatherInfo> weatherInfos = null;WeatherInfo weatherInfo = null;XmlPullParser parser = Xml.newPullParser();parser.setInput(is, "utf-8");// 初始化解析器int type = parser.getEventType();// 得到事件类型while (type != XmlPullParser.END_DOCUMENT) {switch (type) {case XmlPullParser.START_TAG:if ("infos".equals(parser.getName())) {weatherInfos = new ArrayList<WeatherInfo>();} else if ("city".equals(parser.getName())) {weatherInfo = new WeatherInfo();String idStr = parser.getAttributeValue(0);weatherInfo.setId(Integer.parseInt(idStr));} else if ("temp".equals(parser.getName())) {String temp = parser.nextText();weatherInfo.setTemp(temp);} else if ("wind".equals(parser.getName())) {String wind = parser.nextText();weatherInfo.setWind(wind);} else if ("name".equals(parser.getName())) {String name = parser.nextText();weatherInfo.setName(name);}break;case XmlPullParser.END_TAG:if ("city".equals(parser.getName())) {// 一个城市已经处理完毕weatherInfos.add(weatherInfo);weatherInfo = null;// 方便垃圾回收机回}break;}type = parser.next();}return weatherInfos;}}/* * 解析过程 定义了一个指针,指向开头 * * 标签 tag,文本 * * 文档开始 文档结束 * * startTag endTag */
WeatherInfo.java
package com.serviatech.weather.domain;public class WeatherInfo {private int id;private String name;private String temp;private String wind;public int getId() {return id;}@Overridepublic String toString() {return "WeatherInfos [城市id=" + id + ", 名字=" + name + ", 温度=" + temp+ ", 风力=" + wind + "]";}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getTemp() {return temp;}public void setTemp(String temp) {this.temp = temp;}public String getWind() {return wind;}public void setWind(String wind) {this.wind = wind;}}/* * DOM 全部加载到内存。生成一个树状结构,消耗内存比较大 * * SAX 基于事件的方式,速度快,效率高,不能回退。 * * PULL 基于事件解析,语法简洁 */
MainActivity.java
package com.serviatech.weather;import java.util.List;import com.serviatech.weather.domain.WeatherInfo;import com.serviatech.weather.service.WeatherService;import android.os.Bundle;import android.app.Activity;import android.view.Menu;import android.widget.TextView;import android.widget.Toast;public class MainActivity extends Activity {private TextView tv;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);tv = (TextView) findViewById(R.id.tv);try {List<WeatherInfo> infos = WeatherService.getWeatherInfos(MainActivity.this.getClassLoader().getResourceAsStream("weather.xml"));StringBuilder sb = new StringBuilder();for (WeatherInfo info : infos) {sb.append(info.toString());sb.append("\n");}tv.setText(sb.toString());} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();Toast.makeText(this, "解析信息失败", 0).show();}}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.main, menu);return true;}}
0 0
- XML---Android中解析XML .
- XML - Android中解析XML
- android 解析XML 生成XML
- android Pull解析(XML解析)
- android XML解析
- Android Manifest.xml解析
- Android XML文档解析
- android xml解析
- android--xml解析
- Android--xml解析(Dom)
- Android中解析XML
- android SAX解析XML
- android中xml解析
- android教程--xml解析
- Android中XML解析
- android xml解析(一)
- android xml解析(二)
- Android--DOM解析XML
- some advise to write Front end Engineer resume
- MFC学习笔记之坐标系
- Android应用之——利用getItemViewType为Listview的item设置不同的布局
- 查询文件中包含多少个指定的字符串
- MFC中的画刷CBrush
- Android xml 解析
- UML 中关系详解以及在visio中的表示
- 实训学习课——C#(第一篇)
- fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏之解决
- java web学习基础(一)
- poj 3438:Balanced Lineup
- [Java] 在 eclipse 下使用 maven 的小菜记录
- Windows 自旋锁分析(一)
- Linux shell 脚本攻略shell代码(小试牛刀)