Как проанализировать XML-узлы с пробелами в метке узла? - PullRequest
0 голосов
/ 29 апреля 2011

Я использую веб-сервис weather.com, чтобы запросить текущие условия для местоположения, и анализирую текущую температуру, похоже на значок температуры и текущего состояния в моем приложении Flash. Нынешняя температура и ощущения температуры Узлы вложены в NowItems -> NowItem, а WeatherToday находится дальше в ленте. Я написал следующее в AS3:

public class Main extends MovieClip
{

    public function Main()
    {

        var urlRequest:URLRequest = new URLRequest("WebServiceURL");
        var urlLoader:URLLoader=new URLLoader();

        urlLoader.addEventListener(Event.COMPLETE, onXmlLoaded);
        urlLoader.load(urlRequest);
    }
    private function onXmlLoaded(event:Event):void
    {
        XML.ignoreWhitespace = true;
        var urlLoader:URLLoader = event.currentTarget as URLLoader;
        var resultXML:XML = XML(urlLoader.data);
        trace(resultXML.NowItems.NowItem.CURRENT TEMPERATURE.Value);
        trace(resultXML.NowItems.NowItem.FEELS LIKE.Value);
        trace(resultXML.WeatherToday.Icon);
        var lowtemp_label :TextField = new TextField();
        addChild(lowtemp_label);
        var hitemp_label :TextField=new TextField();
        addChild(hitemp_label);
        var condicon_label :TextField=new TextField();
        addChild(condicon_label);
        lowtemp_label.text = resultXML.minTemp;
        hitemp_label.text= resultXML.maxTemp;
        condicon_label.text=resultXML.icon;
        }

    }

Вот некоторые из XML:

<rss version="2.0" xmlns:a10="http://www.w3.org/2005/Atom">
<channel>
<title>WEATHERSCAPE</title>
<link>http://www.weatherchannel.com.au/</link>
<description>WEATHERSCAPE DATA</description>
<category>Weather</category>
<item>
  <guid isPermaLink="false">18b88e0b-b53f-41a3-bdfb-0762ae440f60</guid>
  <link>http://www.weatherchannel.com.au/</link>
  <title>Weather</title>
  <description>&lt;?xml version="1.0" encoding="utf-16"?&gt;

&lt;LocalWeather xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"&gt;

&lt;AreaType&gt;suburb&lt;/AreaType&gt;

&lt;AreaId&gt;555&lt;/AreaId&gt;

&lt;AreaName&gt;SYDNEY&lt;/AreaName&gt;

&lt;UTCOffset&gt;600&lt;/UTCOffset&gt;

&lt;ForecastCreated&gt;2011-04-29T17:10:25Z&lt;/ForecastCreated&gt;

&lt;ObservationsCreated&gt;2011-04-29T17:00:00Z&lt;/ObservationsCreated&gt;

&lt;NowItems&gt;

&lt;NowItem&gt;

  &lt;Label&gt;CURRENT TEMPERATURE&lt;/Label&gt;

  &lt;Value&gt;16.7&lt;/Value&gt;

  &lt;Units&gt;°C&lt;/Units&gt;

  &lt;Change&gt;STEADY&lt;/Change&gt;

&lt;/NowItem&gt;

&lt;NowItem&gt;

  &lt;Label&gt;FEELS LIKE&lt;/Label&gt;

  &lt;Value&gt;16.9&lt;/Value&gt;

  &lt;Units&gt;°C&lt;/Units&gt;

  &lt;Change&gt;STEADY&lt;/Change&gt;

&lt;/NowItem&gt;

&lt;NowItem&gt;

  &lt;Label&gt;DEW POINT&lt;/Label&gt;

  &lt;Value&gt;16&lt;/Value&gt;

  &lt;Units&gt;°C&lt;/Units&gt;

  &lt;Change&gt;DOWN&lt;/Change&gt;

&lt;/NowItem&gt;

&lt;NowItem&gt;

  &lt;Label&gt;HUMIDITY&lt;/Label&gt;

  &lt;Value&gt;96&lt;/Value&gt;

  &lt;Units&gt;%&lt;/Units&gt;

&lt;/NowItem&gt;

&lt;NowItem&gt;

  &lt;Label&gt;WIND SPEED&lt;/Label&gt;

  &lt;Value&gt;9&lt;/Value&gt;

  &lt;Units&gt;km/h&lt;/Units&gt;

  &lt;Change&gt;STEADY&lt;/Change&gt;

  &lt;Direction&gt;SW&lt;/Direction&gt;

&lt;/NowItem&gt;

&lt;NowItem&gt;

  &lt;Label&gt;WIND GUSTS&lt;/Label&gt;

  &lt;Value&gt;15&lt;/Value&gt;

  &lt;Units&gt;km/h&lt;/Units&gt;

&lt;/NowItem&gt;

&lt;NowItem&gt;

  &lt;Label&gt;PRESSURE&lt;/Label&gt;

  &lt;Value&gt;1022&lt;/Value&gt;

  &lt;Units&gt;hPa&lt;/Units&gt;

  &lt;Change&gt;STEADY&lt;/Change&gt;

&lt;/NowItem&gt;

&lt;NowItem&gt;

  &lt;Label&gt;RAIN SINCE 9AM&lt;/Label&gt;

  &lt;Value&gt;9&lt;/Value&gt;

  &lt;Units&gt;mm&lt;/Units&gt;

  &lt;Change&gt;N/A&lt;/Change&gt;

&lt;/NowItem&gt;

&lt;NowItem&gt;

  &lt;Label&gt;FIRE DANGER LEVEL&lt;/Label&gt;

  &lt;Value&gt;UNAVAILABLE&lt;/Value&gt;

  &lt;Units&gt;N/A&lt;/Units&gt;

&lt;/NowItem&gt;

&lt;/NowItems&gt;

&lt;WMOID&gt;94768&lt;/WMOID&gt;

&lt;SiteId&gt;66062&lt;/SiteId&gt;

&lt;WeatherStation&gt;SYDNEY&lt;/WeatherStation&gt;
&lt;WeatherToday&gt;

&lt;Icon&gt;Fewshowers&lt;/Icon&gt;

&lt;FriendlyName&gt;Few showers&lt;/FriendlyName&gt;

&lt;Precis&gt;Few showers.&lt;/Precis&gt;

&lt;MaxTemp&gt;22&lt;/MaxTemp&gt;

&lt;MinTemp&gt;17&lt;/MinTemp&gt;

&lt;Units&gt;°C&lt;/Units&gt;

&lt;MorningIcon&gt;Showers&lt;/MorningIcon&gt;

&lt;AfternoonIcon&gt;Fewshowers&lt;/AfternoonIcon&gt;

&lt;EveningIcon&gt;Showers&lt;/EveningIcon&gt;

&lt;MorningPrecis&gt;Showers&lt;/MorningPrecis&gt;

&lt;AfternoonPrecis&gt;Few showers&lt;/AfternoonPrecis&gt;

&lt;EveningPrecis&gt;Showers&lt;/EveningPrecis&gt;

&lt;/WeatherToday&gt;

Я получаю ошибки компилятора в строках, запрашивающих текущую температуру и ощущения, поскольку в них есть пробелы? Какой синтаксис я использую для ссылки на эти узлы, если у них есть пробелы? Это правильный способ ссылки на эти узлы, или есть более простые методы? Когда я ссылаюсь на узлы в тексте метки (последние 3 строки), использую ли я полностью определенный узел, как в моих операторах трассировки?

Большое спасибо !!

1 Ответ

2 голосов
/ 29 апреля 2011

Внутри узла описания находится строка XML, которая не является XML
вам нужно получить узел описания, а затем преобразовать его в xml, чтобы разобрать его


[EDIT]
Хорошо, в вашем примере это в основном 2 XML-файла, один внутри другого.
Так что нам нужно разобрать узел описания, который вы можете узнать из ЗДЕСЬ и ЗДЕСЬ - хороший пример загрузчика

После того, как вы успешно получили содержимое узла описания, теперь вам нужно удалить данные, поскольку они были преобразованы в дружественный HTML-формат. преобразовать его - извините, сейчас нет времени на тестирование)
Пример:

& lt должно быть преобразовано в <</p>

После того, как строка была преобразована, вы создадите новый объект XML: из этого и затем получите доступ к нужному вам узлу, как вы делали, когда анализировали ответ сервера.

...