2012-09-26 1 views
0

free.worldweatheronline.com의 XML 웹 서비스에서 데이터를 가져 오려고합니다. 도시가있는 경우 도시 이름을 먼저 지정합니다. 웹 서비스는 데이터를 반환과 같은 어떤 것을 :는 오류 메시지를 반환하는 동안 xml 서비스에서 flex 데이터를 가져올 수 없습니다.

<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> 

내가 코드 위에서 cityNameData.text 전에이

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

처럼 할 노력하고있어하지만이 있습니다 속성이되지는 않습니다 XML에있는 경우 그

+0

같이 XML에 해당 속성의 availbe 여부를 확인해야 당신이 _correct_을 의미합니까 또는 _흐름_? –

답변

0

같은 정의되지 않은 속성 또는 뭔가 오류

을 던졌습니다 의 오류

가 // 또한 루트 이름이 아이 노드

에게 액세스 할 수 지정할 필요에주의하지 // 당신은, 제목이

 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

안녕하세요, 먼저 작동하지 않습니다. {var errorXML : XML = result_weather_data;에서 개체 유형을 XML로 변환 할 수 없습니다.) 그리고 용어는 그 속성이 없거나 비슷한 것을 가지고 있다고합니다. –

+0

기본적으로 서비스가 올바른 결과를 얻은 경우 Object입니다. 그렇지 않으면 결과 형식이 XML이므로 위에서 언급 한 형식을 먼저 확인해야합니다. :) –

+0

친애하는 내가 해냈어. 그런 식으로 작동했지만 event.result가 XML이면 {Error # 1010 : 조건이 정의되지 않고 속성이 없습니다.} {cityNameData.text = result_weather_data.data.request.query;}의 줄에서 나는 그것을 다시 해결한다. .. –

관련 문제