1

我正在尝试从 openweathermap-webservice 获取一些天气数据。数据中还有一个 iconCode 以可视化当前的天气状况。这是给定请求的 xml 响应:

要求:

http://api.openweathermap.org/data/2.5/forecast?q=linz&units=metric&type=accurate&mode=xml&APPID=ef67184baece136977466e7894b2a614

回复的一部分:(我已经缩短了一点)

<weatherdata>
<location>...</location>
<credit/>
<meta>...</meta>
<sun rise="2017-05-30T03:07:24" set="2017-05-30T18:54:07"/>
<forecast>
  <time from="2017-05-30T09:00:00" to="2017-05-30T12:00:00">
   <symbol number="800" name="clear sky" var="02d"/>
   <precipitation/>
   <windDirection deg="223" code="SW" name="Southwest"/>
   <windSpeed mps="2.31" name="Light breeze"/>
   <temperature unit="celsius" value="29.59" min="27.52" max="29.59"/>
  </time>
  <time from="2017-05-30T12:00:00" to="2017-05-30T15:00:00">
   <symbol number="800" name="clear sky" var="01d"/>
   <precipitation/>
   <windDirection deg="227.001" code="SW" name="Southwest"/>
  </time>

我想检索所有预测日的所有图标代码。(它适用于温度,风向等......

应该从 web 服务获取数据的函数的一部分:

for each (var item in xmlPage.forecast.time) {
var row = new Object();
var from_current_value=item.@from.substring(0,10);

if(from_current_value!=from_today_value){
    row.WindDirection = item.windDirection.@name;
    row.WindSpeed=item.windSpeed.@mps;
    row.WeatherTemp=parseFloat(item.temperature.@value);
    row.WeatherHumidity=parseFloat(item.humidity.@value);
    row.From=item.@from;
    row.To=item.@to;
    row.Title=xmlPage.location.name+" "+xmlPage.location.country;
    row.Precipitation=(item.precipitation.@type+" "+item.precipitation.@value)==" "?"No Precipitation":item.precipitation.@type;

    var iconCode = item.symbol.@var;
    row.IconLink = "http://openweathermap.org/img/w/"+ iconCode +".png";

如果我添加了行 var iconCode = item.symbol.@var,我会收到以下语法错误:

syntax check failed: missing name after .@ (Line#33)

(第 33 行是“var iconCode = item.symbol.@var”行)

我想我得到了错误,因为“var”是 JavaScript 中的保留字符串。但是我如何从 xmlPage 中获取 iconCode 呢?有什么建议么?

非常感谢您提前帮助我!最好的问候,特蕾莎

4

1 回答 1

1

根据他们的文档,您应该使用:

预测.symbol.var

(在你的情况下 item.symbol.var)

另外,使用 JSON 可能更容易?

于 2017-05-30T09:30:30.650 回答