Beispiel für XML in ActionScript: Laden von RSS-Daten aus dem Internet

Flash Player 9 und höher, Adobe AIR 1.0 und höher

In der Beispielanwendung „RSSViewer“ werden mehrere Funktionen für die Verwendung von XML in ActionScript erläutert, einschließlich folgender Funktionen:

  • Verwenden von XML-Methoden zum Durchlaufen von XML-Daten im RSS-Format

  • Verwenden von XML-Methoden zum Zusammenstellen von XML-Daten im HTML-Format zur Verwendung in einem Textfeld

Das RSS-Format zum Bereitstellen von Nachrichten per XML ist sehr verbreitet. Es folgt ein Beispiel für eine einfache RSS-Datendatei:

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

Die Anwendung „SimpleRSS“ liest RSS-Daten aus dem Internet, strukturiert die Daten nach Schlagzeilen (Überschriften), Links und Beschreibungstexten und gibt diese Daten dann zurück. Mit der SimpleRSSUI-Klasse werden die Benutzeroberfläche bereitgestellt und die SimpleRSS-Klasse aufgerufen, in der die gesamte XML-Verarbeitung erfolgt.

Die Anwendungsdateien für dieses Beispiel finden Sie unter www.adobe.com/go/learn_programmingAS3samples_flash_de . Die Dateien der Anwendung „RSSViewer“ befinden sich im Ordner „Samples/RSSViewer“. Die Anwendung umfasst die folgenden Dateien:

Datei

Beschreibung

RSSViewer.mxml

oder

RSSViewer.fla

Die Hauptanwendungsdatei im Flash-Format (FLA) oder Flex-Format (MXML).

com/example/programmingas3/rssViewer/RSSParser.as

Eine Klasse mit Methoden, mit denen E4X zum Durchlaufen der RSS-Daten (im XML-Format) verwendet und eine entsprechende HTML-Darstellung erzeugt wird.

RSSData/ak.rss

Eine RSS-Beispieldatei. Die Anwendung ist so eingerichtet, dass RSS-Daten aus dem Internet mit einem durch Adobe gehosteten Flex-RSS-Eingabestrom gelesen werden. Sie können jedoch die Anwendung problemlos so ändern, dass RSS-Daten aus dem aufgeführten Dokument gelesen werden, in dem ein geringfügig anderes Schema als im Flex-RSS-Datenstrom verwendet wird.

Lesen und Strukturieren von XML-Daten

Die RSSParser-Klasse enthält die xmlLoaded() -Methode, mit der die in der rssXML -Variablen gespeicherten RSS-Eingabedaten in einen String mit HTML-formatierten Ausgabedaten ( rssOutput ) konvertiert werden.

Am Anfang der Methode wird im Code der XML-Standardnamespace festgelegt, wenn die RSS-Quelldaten einen Standardnamespace enthalten:

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

In den nächsten Zeilen wird der Inhalt der XML-Quelldaten in einer Schleife durchlaufen. Zudem werden alle Nachfolgereigenschaften mit dem Namen item überprüft.

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); 
}

In den ersten drei Zeilen werden einfach nur Stringvariablen für die Titel-, Beschreibungs- und Linkeigenschaften der item -Eigenschaft in den XML-Daten festgelegt. In der nächsten Zeile wird dann die buildItemHTML() -Methode aufgerufen, um HTML-Daten in Form eines XMLList-Objekts abzurufen. Dabei dienen die drei neuen Stringvariablen als Parameter.

Zusammenstellen von XMLList-Daten

Die HTML-Daten (ein XMLList-Objekt) haben das folgende Format:

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

In den ersten Zeilen der Methode wird der XML-Standardnamespace gelöscht:

default xml namespace = new Namespace();

Der Gültigkeitsbereich der default xml namespace -Direktive ist auf Funktionsblöcke beschränkt. Dies bedeutet, dass der Gültigkeitsbereich dieser Deklaration die buildItemHTML() -Methode ist.

In den folgenden Zeilen wird das XMLList-Objekt mithilfe der an die Funktion übergebenen Stringargumente zusammengestellt:

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;

Dieses XMLList-Objekt enthält Stringdaten, die für ein ActionScript-HTML-Textfeld geeignet sind.

In der xmlLoaded() -Methode wird der Rückgabewert der buildItemHTML() -Methode in einen String konvertiert:

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

Extrahieren des Titels des RSS-Feeds und Senden eines benutzerdefinierten Ereignisses

In der xmlLoaded() -Methode wird anhand der Informationen in den RSS-XML-Quelldaten eine Stringvariable rssTitle festgelegt:

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

Die xmlLoaded() -Methode erzeugt schließlich ein Ereignis, durch das die Anwendung darüber benachrichtigt wird, dass die Daten analysiert wurden und nun verfügbar sind:

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