static void parse_forecast_xml (GWeatherInfo *master_info, SoupMessageBody *body) { GWeatherInfoPrivate *priv; xmlDocPtr doc; xmlXPathContextPtr xpath_ctx; xmlXPathObjectPtr xpath_result; int i; priv = master_info->priv; doc = xmlParseMemory (body->data, body->length); if (!doc) return; xpath_ctx = xmlXPathNewContext (doc); xpath_result = xmlXPathEval (XC("/weatherdata/forecast/time"), xpath_ctx); if (!xpath_result || xpath_result->type != XPATH_NODESET) goto out; for (i = 0; i < xpath_result->nodesetval->nodeNr; i++) { xmlNodePtr node; GWeatherInfo *info; node = xpath_result->nodesetval->nodeTab[i]; info = make_info_from_node (master_info, node); priv->forecast_list = g_slist_append (priv->forecast_list, info); } xmlXPathFreeObject (xpath_result); xpath_result = xmlXPathEval (XC("/weatherdata/credit/link"), xpath_ctx); if (!xpath_result || xpath_result->type != XPATH_NODESET) goto out; priv->forecast_attribution = g_strdup(_("Weather data from the <a href=\"http://openweathermap.org\">Open Weather Map project</a>")); out: if (xpath_result) xmlXPathFreeObject (xpath_result); xmlXPathFreeContext (xpath_ctx); xmlFreeDoc (doc); }
static void parse_forecast_xml (GWeatherInfo *master_info, SoupMessageBody *body) { GWeatherInfoPrivate *priv; xmlDocPtr doc; xmlXPathContextPtr xpath_ctx; xmlXPathObjectPtr xpath_result; int i; priv = master_info->priv; doc = xmlParseMemory (body->data, body->length); if (!doc) return; xpath_ctx = xmlXPathNewContext (doc); xmlXPathRegisterNs (xpath_ctx, XC("yweather"), XC("http://xml.weather.yahoo.com/ns/rss/1.0")); xpath_result = xmlXPathEval (XC("/rss/channel/item/yweather:forecast"), xpath_ctx); if (!xpath_result || xpath_result->type != XPATH_NODESET) goto out; for (i = 0; i < xpath_result->nodesetval->nodeNr; i++) { xmlNodePtr node; GWeatherInfo *info; node = xpath_result->nodesetval->nodeTab[i]; info = make_info_from_node (master_info, node); priv->forecast_list = g_slist_append (priv->forecast_list, info); } xmlXPathFreeObject (xpath_result); out: xmlXPathFreeContext (xpath_ctx); xmlFreeDoc (doc); }