Przykład użycia kodu XML w programie ActionScript: ładowanie danych RSS z Internetu

Flash Player 9 i nowsze wersje, Adobe AIR 1.0 i nowsze wersje

Przykładowa aplikacja RSSViewer ilustruje szereg aspektów pracy z danymi XML w języku ActionScript, a w szczególności:

  • Użycie metod XML do przeglądania danych XML w postaci kanału RSS.

  • Użycie metod XML do przekształcania danych XML do postaci HTML odpowiedniej do wyświetlania w polu tekstowym.

Format RSS, oparty na strukturze danych XML, jest szeroko stosowany do syndykacji wiadomości. Oto przykład prostego pliku danych RSS:

<?xml version="1.0" encoding="UTF-8" ?>  
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/"> 
<channel> 
    <title>Alaska - Weather</title>  
    <link>http://www.nws.noaa.gov/alerts/ak.html</link>  
    <description>Alaska - Watches, Warnings and Advisories</description>  
 
    <item> 
        <title> 
            Short Term Forecast - Taiya Inlet, Klondike Highway (Alaska) 
        </title>  
        <link> 
            http://www.nws.noaa.gov/alerts/ak.html#A18.AJKNK.1900 
        </link>  
        <description> 
            Short Term Forecast Issued At: 2005-04-11T19:00:00  
            Expired At: 2005-04-12T01:00:00 Issuing Weather Forecast Office  
            Homepage: http://pajk.arh.noaa.gov 
        </description>  
</item> 
    <item> 
        <title> 
            Short Term Forecast - Haines Borough (Alaska) 
        </title>  
            <link> 
            http://www.nws.noaa.gov/alerts/ak.html#AKZ019.AJKNOWAJK.190000 
        </link> 
        <description> 
            Short Term Forecast Issued At: 2005-04-11T19:00:00  
            Expired At: 2005-04-12T01:00:00 Issuing Weather Forecast Office  
            Homepage: http://pajk.arh.noaa.gov 
        </description>  
    </item> 
</channel> 
</rss>

Aplikacja SimpleRSS odczytuje dane RSS z Internetu, wykrywa w danych nagłówki (tytuły), łącza i opisy oraz zwraca te dane. Klasa SimpleRSSUI udostępnia interfejs użytkownika i wywołuje klasę SimpleRSS, która realizuje pozostałe operacje przetwarzania danych XML.

Aby pobrać pliki tej przykładowej aplikacji, należy przejść na stronę www.adobe.com/go/learn_programmingAS3samples_flash_pl . Pliki aplikacji RSSViewer znajdują się w folderze Samples/RSSViewer. Aplikacja składa się z następujących plików:

File

Opis

RSSViewer.mxml

lub

RSSViewer.fla

Główny plik aplikacji w formacie Flash (FLA) lub Flex (MXML).

com/example/programmingas3/rssViewer/RSSParser.as

Klasa zawierająca metody korzystające z elementów specyfikacji E4X w celu przeanalizowania danych RSS (XML) i wygenerowania odpowiedniej ich reprezentacji w formacie HTML.

RSSData/ak.rss

Przykładowy plik RSS. Aplikacja jest skonfigurowana do odczytu danych RSS z sieci Web, z kanału Flex RSS obsługiwanego przez firmę Adobe. Można jednak w prosty sposób zmodyfikować aplikację tak, aby odczytywała dane RSS z tego dokumentu, w którym stosowany jest schemat nieznacznie różniący się od stosowanego w kanale Flex RSS.

Odczytywanie i analizowanie danych XML

Klasa RSSParser zawiera metodę xmlLoaded() , która konwertuje wejściowe dane RSS, przechowywane w zmiennej rssXML , na ciąg zawierający wynik w formacie HTML, rssOutput .

W pobliżu początku metody wybierana jest domyślna przestrzeń nazw XML, o ile źródłowe dane RSS wskazują domyślną przestrzeń nazw:

if (rssXML.namespace("") != undefined) 
{ 
    default xml namespace = rssXML.namespace(""); 
}

Następne wiersze zawierają pętlę analizującą wszystkie właściwości podrzędne item w danych źródłowych XML:

for each (var item:XML in rssXML..item) 
{ 
    var itemTitle:String = item.title.toString(); 
    var itemDescription:String = item.description.toString(); 
    var itemLink:String = item.link.toString(); 
    outXML += buildItemHTML(itemTitle,  
                            itemDescription, 
                            itemLink); 
}

Pierwsze trzy wiersze przypisują zmiennym wartości reprezentujące tytuł, opis i łącze z właściwości item danych XML. Następny wiersz zawiera wywołanie metody buildItemHTML() w celu pobrania danych HTML w postaci obiektu XMLList, z parametrami w postaci trzech nowych zmiennych typu String.

Konstruowanie danych XMLList

Dane HTML (obiekt XMLList) mają następującą postać:

<b>itemTitle</b> 
<p> 
    itemDescription 
    <br /> 
    <a href="link"> 
        <font color="#008000">More...</font> 
    </a> 
</p>

W pierwszym wierszu metody anulowany jest wybór domyślnej przestrzeni nazw xml:

default xml namespace = new Namespace();

Dyrektywa default xml namespace ma zasięg bloku funkcyjnego. Oznacza to, że zasięgiem tej deklaracji jest metoda buildItemHTML() .

W następnych wierszach obiekt XMLList jest konstruowany na podstawie argumentów typu String przekazanych do funkcji:

var body:XMLList = new XMLList(); 
body += new XML("<b>" + itemTitle + "</b>"); 
var p:XML = new XML("<p>" + itemDescription + "</p>"); 
 
var link:XML = <a></a>; 
link.@href = itemLink; // <link href="itemLinkString"></link> 
link.font.@color = "#008000";  
        // <font color="#008000"></font></a> 
        // 0x008000 = green 
link.font = "More..."; 
 
p.appendChild(<br/>);  
p.appendChild(link);  
body += p;

Obiekt XMLList reprezentuje ciąg znaków odpowiedni do wyświetlania w polu tekstowym HTML w środowisku ActionScript.

Metoda xmlLoaded() pobiera wartość zwracaną przez metodę buildItemHTML() i konwertuje ją na ciąg znaków:

XML.prettyPrinting = false; 
rssOutput = outXML.toXMLString();    

Wyodrębnienie tytułu kanału RSS i wysłanie zdarzenia niestandardowego

Metoda xmlLoaded() przypisuje wartość zmiennej rssTitle typu String na podstawie informacji zawartych w źródłowych danych RSS (XML):

rssTitle = rssXML.channel.title.toString();

Na koniec metoda xmlLoaded() generuje zdarzenie, powiadamiając w ten sposób aplikację, że dane zostały przeanalizowane i są dostępne:

            dataWritten = new Event("dataWritten", true);