今天学习了一下如何获取天气,也学习了另外一种解析xml的方法
通过google api获取的天气的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="Beijing, Beijing" />
<postal_code data="beijing" />
<latitude_e6 data="" />
<longitude_e6 data="" />
<forecast_date data="2011-01-13" />
<current_date_time data="2011-01-13 16:00:00 +0000" />
<unit_system data="US" />
</forecast_information>
<current_conditions>
<condition data="Clear" />
<temp_f data="23" />
<temp_c data="-5" />
<humidity data="Humidity: 39%" />
<icon data="/ig/images/weather/sunny.gif" />
<wind_condition data="Wind: N at 2 mph" />
</current_conditions>
<forecast_conditions>
<day_of_week data="Thu" />
<low data="12" />
<high data="37" />
<icon data="/ig/images/weather/sunny.gif" />
<condition data="Clear" />
</forecast_conditions>
<forecast_conditions>
<day_of_week data="Fri" />
<low data="8" />
<high data="28" />
<icon data="/ig/images/weather/sunny.gif" />
<condition data="Clear" />
</forecast_conditions>
<forecast_conditions>
<day_of_week data="Sat" />
<low data="12" />
<high data="26" />
<icon data="/ig/images/weather/sunny.gif" />
<condition data="Clear" />
</forecast_conditions>
<forecast_conditions>
<day_of_week data="Sun" />
<low data="12" />
<high data="30" />
<icon data="/ig/images/weather/sunny.gif" />
<condition data="Clear" />
</forecast_conditions>
</weather>
</xml_api_reply>
解析这个xml的code
class getWeather implements Runnable {
@Override
public void run() {
// TODO Auto-generated method stub
String weather = "";
String url = "http://www.google.com/ig/api?&weather=beijing";
DefaultHttpClient client = new DefaultHttpClient();
HttpUriRequest req = new HttpGet(url);
HttpResponse resp;
try {
resp = client.execute(req);
HttpEntity ent = resp.getEntity();
InputStream stream = ent.getContent();
// printEntity(stream);
DocumentBuilder b = DocumentBuilderFactory.newInstance()
.newDocumentBuilder();
Document d = b.parse(new InputSource(stream));
NodeList n = d.getElementsByTagName("forecast_conditions");
for (int i = 0; i < n.getLength(); i++) {
weather += n.item(i).getChildNodes().item(0)
.getAttributes().item(0).getNodeValue();
weather += ", ";
weather += (Integer.parseInt(n.item(i).getChildNodes()
.item(1).getAttributes().item(0).getNodeValue()) - 32) * 5 / 9;
weather += " ~ ";
weather += (Integer.parseInt(n.item(i).getChildNodes()
.item(2).getAttributes().item(0).getNodeValue()) - 32) * 5 / 9;
weather += ", ";
weather += n.item(i).getChildNodes().item(4)
.getAttributes().item(0).getNodeValue();
weather += "\n";
}
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ParserConfigurationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SAXException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(" weather is " + weather);
}
};
这种方式不需要知道每个节点的属性名称,但缺点和优点都是它,但server改变了每个节点的顺序,得到的数据就会错了。
分享到:
相关推荐
使用SAX解析XML时,我们需要实现一个SAX解析器的处理器类,这个类需要继承自Java中的`DefaultHandler`。在处理器中,我们需要重写如`startElement`、`endElement`和`characters`等方法。当解析器读取到XML文档的相应...
XML-Pull解析是一种轻量级的解析方法,与DOM(Document Object Model)和SAX(Simple API for XML)不同,它不需要一次性加载整个XML文档到内存中。XML-Pull解析器在读取XML文档时,只处理当前的事件,这样可以节省...
C#是Microsoft开发的一种面向对象的编程语言,广泛应用于Windows桌面应用、Web应用以及游戏开发等。C#具有丰富的类库和强大的功能,非常适合进行网络请求和XML解析。 要调用Google Weather API,我们需要具备以下...
SAX解析器是一种事件驱动的解析方式,它逐行读取XML文档,遇到特定的元素开始、结束或有属性时触发回调函数。这种方式相较于DOM解析器,内存占用较低,适合处理大体积的XML文档。 要开始解析Google天气预报的XML,...
这个项目是Google为Android开发者提供的一种学习和参考资源,旨在帮助他们理解如何在Android平台上构建功能丰富的天气应用。通过研究这个源码,我们可以深入探讨Android应用开发的多个关键知识点。 首先,我们要...
在用户界面设计上,WeatherApp很可能采用了Material Design指南,这是一种Google推出的统一设计语言,旨在提供一致性和良好的用户体验。应用可能包含了多个Activity,每个Activity对应一个特定的屏幕或功能,如主...
JSON是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。它基于JavaScript的一个子集,采用键值对的形式表示数据,例如: ```json { "name": "John", "age": 30, "city": "New York" } `...
Google Weather API是一种网络服务,可以向开发人员提供全球天气信息。在Android应用程序中,可以通过HTTP请求从该API获取特定地点的天气预报数据。 3. XML解析: 在本例中,Google Weather API返回的数据格式为XML...
XML(Extensible Markup Language)是一种用于存储和传输结构化数据的标记语言。在谷歌天气API中,服务器返回的数据就是XML格式。开发者需要解析这个XML文件,提取出如温度、湿度、风速等关键信息。在C#中,可以使用...
SAX是一种事件驱动的解析器,它不会一次性加载整个XML文档到内存,而是逐个处理元素,这样对于处理大型数据流更为高效。在获取到天气API的XML响应后,开发者会使用SAX解析器来解析这些数据,提取出所需的天气信息,...
科特林是Google推出的一种现代、静态类型的编程语言,主要用于Android应用开发,它具有简洁的语法和强大的功能,受到了广大开发者喜爱。 【描述解析】 描述中的信息非常简洁,仅给出了项目的名字"Weather,科特林...
Pull解析器介于两者之间,提供了一种流式处理方式,易于使用。 6. **WeatherWidgetTest**:这可能是项目中的测试代码或者测试用例文件,通常包含单元测试或集成测试,用于验证天气小部件的功能是否正常工作。测试...
Retrofit提供了一种简洁的接口定义方式,能够将网络请求与业务逻辑解耦。 2. **数据解析**:接收到的天气数据通常是JSON或XML格式,需要进行解析。Android提供了`Gson`库用于JSON解析,`SimpleXML`或`Jackson`库...
Google提供了一种基于XML或JSON格式的天气API,可以通过发送HTTP请求来获取。在Java中,我们可以使用`HttpURLConnection`或者`HttpClient`等网络通信库来发送GET请求。例如,构造一个包含特定城市的URL(如`...
- 示例中的`cleanCache`方法实现了一种定时清理缓存的机制,每隔24小时检查一次缓存,并移除过期的数据。这种方法可以有效地减少网络请求次数,提高应用程序的整体性能。 #### 四、示例代码分析 1. **HTML解析** ...
Swift是一种强大且易于学习的编程语言,用于构建iOS、iPadOS、macOS、watchOS和tvOS的应用。 - **Android:** 如果是Java或Kotlin,那么需要使用Android Studio。这两种语言都是Android应用开发的常用选择,Kotlin...
Android小部件是桌面快捷方式的一种形式,它们可以在用户的主屏幕上显示动态信息,如天气、时钟或新闻更新。它们是由AppWidgetProvider类控制,并通过XML布局文件定义其外观。 在"weatherWidget-master"这个源码...
首先,让我们关注"weather"这一关键词。这通常意味着源码中可能包含了一个天气应用程序,它可能涉及网络请求、数据解析、UI设计以及本地存储等多个方面。天气应用的开发通常涉及到以下几个核心组件: 1. **网络通信...