2012-09-26 2 views
0

Я пытаюсь получить данные из веб-службы xml. Free.worldweatheronline.com Сначала я даю название города, если город найден в веб-сервис возвращает данные некоторые вещи, как это:не смог получить данные о корректности данных из службы xml в flex, пока он возвращает ошибку. Msg

<data><request><type>City</type><query>Hyderabad, india</query></request><current_condition><observation_time>06:04 AM</observation_time><temp_C>34</temp_C><temp_F>92</temp_F><weatherCode>113</weatherCode><weatherIconUrl>http://www.worldweatheronline.com/images/wsymbols01_png_64/wsymbol_0001_sunny.png</weatherIconUrl><weatherDesc>Sunny</weatherDesc><windspeedMiles>14</windspeedMiles><windspeedKmph>22</windspeedKmph><winddirDegree>230</winddirDegree><winddir16Point>SW</winddir16Point><precipMM>0.0</precipMM><humidity>50</humidity><visibility>10</visibility><pressure>1011</pressure><cloudcover>0</cloudcover></current_condition> 

мой гибкий код для службы HTTP, как это:

<s:HTTPService id="weatherService" 
        url="{BASE_URL}" 
        resultFormat="object" 
        result="weatherService_resultHandler(event)" 
        fault="weatherService_faultHandler(event)" 
        showBusyCursor="true"> 
     <s:request xmlns=""> 
      <q>{cityName.text.toString()}</q> 
      <format>{FORMAT}</format> 
      <num_of_days>{NUMBER_OF_DAYS}</num_of_days> 
      <key>{API_KEY}</key> 
     </s:request> 
    </s:HTTPService> 

и это код обработки:

private static const BASE_URL:String="http://free.worldweatheronline.com/feed/weather.ashx"; 
private static const API_KEY:String="MY_API_KEY"; 
private static const NUMBER_OF_DAYS:uint=2; 
private static const FORMAT:String="xml"; 


protected function weatherService_resultHandler(event:ResultEvent):void 
{ 
    // TODO Auto-generated method stub 
    var result_weather_data:Object = event.result; 
    cityNameData.text=result_weather_data.data.request.query; 
} 

protected function weatherService_faultHandler(event:FaultEvent):void 
{ 
    // TODO Auto-generated method stub   

} 

и если город не нашел, что это возвращает XML-данные, как это:

<data><error><msg>Unable to find any matching weather location to the query submitted!</msg></error></data> 

я пытаюсь сделать, как этот

var error_msg:String = result_weather_data.data.error.msg; 

перед cityNameData.text из выше кода, но это дает ошибка , что не определено свойство или что-то подобное

+0

в заголовке, вы имеете в виду _correct_ или _текущий_? –

ответ

0

Если свойство не существует в XML он будет кидает ошибки

// Также обратите внимание корневое имя не нужно указать, чтобы получить доступ к этим детям узлу

// Вы должны проверить, что свойство availbe или не в XML, как этот

 if(event.result is XML) 
    {   
     var errorXML:XML = event.result as XML; 

     if(errorXML && errorXML.hasOwnPerperty("error")) 
     { 
      if(errorXML.error && errorXML.error.hasOwnProperty("msg")) 
      { 
       var yourErrorMsg:String = errorXML.error.msg; 
      } 
     } 
    }   
    else if(event.result is Object) 
    { 
     var result_weather_data:Object = event.result; 

     if(result_weather_data && result_weather_data.hasOwnProperty('data')) 
     { 
      if(result_weather_data.data && result_weather_data.data.hasOwnProperty("request")) 
      { 
       if(result_weather_data.data.request && result_weather_data.data.request.hasOwnProperty("query")) 
       { 
        cityNameData.text = result_weather_data.data.request.query; 
       } 
       else 
       { 
        trace("query property not exists in result_weather_data.data.request Object"); 
       } 
      } 
      else 
      { 
       trace("request property not exists in result_weather_data.data Object"); 
      } 
     } 
     else 
     { 
      trace("result_weather_data is NULL or data property not exists in result_weather_data Object"); 
     } 
    } 
+0

Дорогой он не работает, сначала он говорит Тип объекта не может быть преобразован в XML на {var errorXML: XML = result_weather_data;) и говорит, что термин не имеет свойств или чего-то подобного –

+0

В принципе, если ваша служба получила результат, это означает, что ваш тип является объектом, иначе вы получили тип результата XML, поэтому сначала нужно проверить тип, как я упомянул выше :) –

+0

дорогой я сделал это в вашем случае это сработало, но если event.result - это XML, то он говорит {Ошибка # 1010: Термин не определен и не имеет свойств.} в строке {cityNameData.text = result_weather_data.data.request.query;} как можно Я решаю это снова. .. –