Voorbeeld van XML in ActionScript: RSS-gegevens van internet laden

Flash Player 9 of hoger, Adobe AIR 1.0 of hoger

In de voorbeeldtoepassing van RSSViewer worden een aantal kenmerken van werken met XML in ActionScript getoond, inclusief de volgende kenmerken:

  • XML-methoden gebruiken voor het doorlopen van XML-gegevens in de vorm van een RSS-feed.

  • XML-methoden gebruiken voor het samenstellen van XML-gegevens in de vorm van HTML voor gebruik in een tekstveld.

De RSS-notatie wordt veelal gebruikt voor het publiceren van nieuws via XML. Een eenvoudig RSS-gegevensbestand kan er als volgt uitzien:

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

De toepassing SimpleRSS leest RSS-gegevens van internet, parseert de gegevens voor koppen (titels), koppelingen en beschrijvingen en retourneert deze gegevens. De klasse SimpleRSSUI biedt de UI en roept de klasse SimpleRSS aan die volledige XML-verwerking uitvoert.

Zie www.adobe.com/go/learn_programmingAS3samples_flash_nl als u de toepassingsbestanden voor dit voorbeeld wilt downloaden. De toepassingsbestanden van RSSViewer vindt u in de map Samples/RSSViewer. De toepassing bestaat uit de volgende bestanden:

Bestand

Beschrijving

RSSViewer.mxml

of

RSSViewer.fla

Het hoofdtoepassingsbestand in Flash (FLA) of Flex (MXML).

com/example/programmingas3/rssViewer/RSSParser.as

Een klasse met methoden die gebruikmaken van E4X voor het doorlopen van RSS-gegevens (XML) en het genereren van een overeenkomende HTML-representatie.

RSSData/ak.rss

Een RSS-voorbeeldbestand. De toepassing is ingesteld om RSS-gegevens te lezen van het web van een RSS-feed van Flex die door Adobe wordt aangeboden. U kunt de toepassing echter gemakkelijk wijzigen voor het lezen van RSS-gegevens uit dit document. Hierbij wordt een iets ander schema gebruikt dan bij de RSS-feed van Flex.

XML-gegevens lezen en parseren

De klasse RSSParser bevat een methode xmlLoaded() waarmee de RSS-invoergegevens die zijn opgeslagen in de variabele rssXML, worden omgezet in een tekenreeks met uitvoer die is opgemaakt in HTML, rssOutput.

Aan het begin van de methode wordt de standaard XML-naamruimte via de code ingesteld wanneer de RSS-brongegevens een standaardnaamruimte bevatten:

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

De volgende regels doorlopen de inhoud van de XML-brongegevens en onderzoeken elke afstammende eigenschap met de naam item:

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

Met de eerste drie regels worden tekenreeksvariabelen ingesteld voor de weergave van de titel, beschrijving en koppelingseigenschappen van de eigenschap item van de XML-gegevens. Met de volgende regel wordt de methode buildItemHTML() aangeroepen voor het omzetten van HTML-gegevens in een object XMLList met behulp van de drie nieuwe tekenreeksvariabelen als parameters.

XMLList-gegevens samenstellen

De HTML-gegevens (een object XMLList) hebben de volgende notatie:

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

Met de eerste regels van de methode wordt de standaard XML-naamruimte verwijderd:

default xml namespace = new Namespace();

De compileraanwijzing default xml namespace heeft een bereik op het niveau van functieblokken. Dit houdt in dat het bereik van deze declaratie de methode buildItemHTML() is.

Met de regels die hierna volgen, wordt het XMLList samengesteld op grond van de tekenreeksargumenten die zijn doorgegeven aan de functie:

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;

Dit object XMLList vertegenwoordigt tekenreeksgegevens die geschikt zijn voor een HTML-tekstveld van ActionScript.

De methode xmlLoaded() maakt gebruik van de geretourneerde waarde van de methode buildItemHTML() en zet deze om in een tekenreeks:

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

De titel van de RSS-feed extraheren en een aangepaste gebeurtenis verzenden

Met de methode xmlLoaded() wordt een tekenreeksvariabele rssTitle ingesteld op grond van informatie in de RSS XML-brongegevens:

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

Tot slot genereert de methode xmlLoaded() een gebeurtenis die aan de toepassing meldt dat de gegevens zijn geparseerd en dat deze beschikbaar zijn:

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