在写android天气预报程序的过程中用到google weather api,而用sax 解析xml文件得到的数据是英文的,这里就出现了数据的转化显示问题。

    例如:查询武汉的天气http://www.google.com/ig/api?weather=wuhan得到的xml数据为: <?xml version="1.0" ?>

- < xml_api_reply version =" 1 "> - < weather module_id =" 0 " tab_id =" 0 " mobile_row =" 0 " mobile_zipped =" 1 " row =" 0 " section =" 0 "> - < forecast_information >   < city data =" Wuhan, Hubei " />   < postal_code data =" wuhan " />   < latitude_e6 data ="" />   < longitude_e6 data ="" />   < forecast_date data =" 2011-09-09 " />   < current_date_time data =" 2011-09-09 21:00:00 +0000 " />   < unit_system data =" SI " />   forecast_information > - < current_conditions >   < condition data =" 多云 " />   < temp_f data =" 72 " />   < temp_c data =" 22 " />   < humidity data =" 湿度: 78% " />   < icon data =" /ig/p_w_picpaths/weather/cn_cloudy.gif " />   < wind_condition data =" 风向: 东北、风速:4 米/秒 " />   current_conditions > + < forecast_conditions >   < day_of_week data =" 周五 " />   < low data =" 18 " />   < high data =" 27 " />   < icon data =" /ig/p_w_picpaths/weather/mostly_sunny.gif " />   < condition data =" 以晴为主 " />   forecast_conditions > - < forecast_conditions >   < day_of_week data =" 周六 " />   < low data =" 20 " />   < high data =" 29 " />   < icon data =" /ig/p_w_picpaths/weather/chance_of_rain.gif " />   < condition data =" 可能有雨 " />   forecast_conditions > - < forecast_conditions >   < day_of_week data =" 周日 " />   < low data =" 22 " />   < high data =" 29 " />   < icon data =" /ig/p_w_picpaths/weather/chance_of_storm.gif " />   < condition data =" 可能有暴风雨 " />   forecast_conditions > - < forecast_conditions >   < day_of_week data =" 周一 " />   < low data =" 23 " />   < high data =" 31 " />   < icon data =" /ig/p_w_picpaths/weather/chance_of_storm.gif " />   < condition data =" 可能有暴风雨 " />   forecast_conditions >   weather >   xml_api_reply >

而用sax解析后得到的数据为:

Wuhan, Hubei
Overcast (代表多云)
2011-09-09 23:00:00 +0000
Fri (代表周五)
Wind: NE at 9 mph(表示风向和风速)
Humidity: 87%(表示湿度)

用于显示则需要进行相应的转化。现把我的转化代码贴出来,希望能惠及大众。

package com.xiaoshuai.util;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class WeatherUtils {

//华氏和摄氏温度之间转化的两个函数这是网上的代码
 public static int fahrenheitToCelsius(int tFahrenheit) {
        return (int) ((5.0f / 9.0f) * (tFahrenheit - 32));
 }
 
 public static int celsiusToFahrenheit(int tCelsius) {
         return (int) ((9.0f / 5.0f) * tCelsius + 32);
 }
 public static String  mph_to_mps(String mph){
  
  
  //用正则表达式把各个元素分出来
  Pattern pattern=Pattern.compile(" ");
  String[] string=pattern.split(mph);
  for(int i=0;i    System.out.println(string[i]);
  }
  //把风速由英里每小时转化成米每秒
  double distance=1609.344;
  double mile=Integer.parseInt(string[3]);
  double  mps=mile*distance/3600;
  System.out.println(mps);
  //把风速转化成等级
  String wind_class="";
  if(mps>=0&&mps<=0.2){
   wind_class="0级";
  }else if(mps>=0.3&&mps<=1.5){
   wind_class="1级";
  }else if(mps>=1.6&&mps<=3.3){
   wind_class="2级";
  }else if(mps>=3.4&&mps<=5.4){
   wind_class="3级";
  }else if(mps>=5.5&&mps<=7.9){
   wind_class="4级";
  }else if(mps>=8.0&&mps<=10.7){
   wind_class="5级";
  }else if(mps>=10.8&&mps<=13.8){
   wind_class="6级";
  }else if(mps>=13.9&&mps<=17.1){
   wind_class="7级";
  }else if(mps>=17.2&&mps<=20.7){
   wind_class="8级";
  }else if(mps>=20.8&&mps<=24.4){
   wind_class="9级";
  }else if(mps>=24.5&&mps<=28.4){
   wind_class="10级";
  }else if(mps>=28.5&&mps<=32.6){
   wind_class="11级";
  }else if(mps>=32.7&&mps<=36.9){
   wind_class="12级";
  }else if(mps>=37.0&&mps<=41.4){
   wind_class="13级";
  }
  //把风向标志转化成汉语
  String direction=string[1];
  String wind_direction="";
  if("N".equals(direction)){
   wind_direction="北风";
  }else if("W".equals(direction)){
   wind_direction="西风";
  }else if("E".equals(direction)){
   wind_direction="东风";
  }else if("S".equals(direction)){
   wind_direction="南风";
  }else if("SE".equals(direction)){
   wind_direction="东南风";
  }else if("NE".equals(direction)){
   wind_direction="东北风";
  }else if("SW".equals(direction)){
   wind_direction="西南风";
  }else if("NW".equals(direction)){
   wind_direction="西北风";
  }
  return wind_direction+wind_class;
 }
 public static void main(String[] args) {

//如果把Wind: NE at 19 mph输入,则显示出:东北风5级
  System.out.println(WeatherUtils.mph_to_mps("Wind: NE at 19 mph"));
 }
}
 

更多相关文章

  1. Android——Json和Gson分别是什么,以及Json 数据的解析方法
  2. Android 2011年开发风向标
  3. json解析天气预报

随机推荐

  1. Android(安卓)之 EditText属性用法介绍
  2. Android里子线程真的不能刷新UI吗?
  3. android intent 常用用法
  4. Android(安卓)Intent study
  5. Android中WebView和JavaScript之间传递js
  6. 网页拉起游戏APP
  7. Android(安卓)Chronometer控件实现计时器
  8. Android(安卓)中的 openGL
  9. android api (82) —— InputConnection
  10. 关于Android接入USB外接摄像头以及控制拍