Exempel på XML i ActionScript: läsa in RSS-data från Internet

Flash Player 9 och senare, Adobe AIR 1.0 och senare

Programmet RSSViewer är ett exempel som visar hur du kan arbeta med XML i ActionScript samt hur du:

  • använder XML-metoder för att gå igenom XML-data i form av en RSS-matning

  • använder XML-metoder för att samla in XML-data i form av HTML för att sedan användas i textfält.

RSS-formatet är vanligt förekommande för att hämta nyheter via XML. En enkel RSS-datafil kan ha följande utseende:

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

I programmet SimpleRSS läses RSS-data från Internet in. Dessa data tolkas för rubriken, länkar och beskrivningar, och därefter returneras dessa data. Klassen SimpleRSSUI ger dig gränssnittet och anropar klassen SimpleRSS där all XML-bearbetning sker.

Programfilerna för det här exemplet finns på www.adobe.com/go/learn_programmingAS3samples_flash_se . Du hittar programfiler för RSSViewer i mappen Samples/RSSViewer. Programmet består av följande filer:

Fil

Beskrivning

RSSViewer.mxml

eller

RSSViewer.fla

Huvudprogramfilen i Flash (FLA) eller Flex (MXML).

com/example/programmingas3/rssViewer/RSSParser.as

En klass som innehåller metoder som använder E4X för att gå igenom RSS-data (XML) och generera motsvarande HTML-representation.

RSSData/ak.rss

En RSS-exempelfil. Programmet har inställningar för att läsa RSS-data från webben via en Flex RSS-matning som tillhandahålls av Adobe. Du kan emellertid ändra programmet så att det läser RSS-data från detta dokument, som använder ett något annorlunda schema än det som finns i Flex RSS-matningen.

Läsa och tolka XML-data

Klassen RSSParser innehåller en xmlLoaded() -metod som konverterar RSS-indata, i variabeln rssXML , som sparas i en sträng som innehåller HTML-formaterade utdata, rssOutput .

I början av metoden anger koden standard-XML-namnutrymmet om källans RSS-data innehåller ett standardnamnutrymme:

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

Nästa rad skapar sedan en slinga genom innehållet för källans XML-data och varje underordnad egenskap med namnet item undersöks:

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

De första tre raderna anger strängvariablerna så att de representerar titel-, beskrivnings- och länkegenskaperna för egenskapen item för XML-datan. Nästa rad anropar metoden buildItemHTML() så att HTML-data hämtas i form av ett XMLList-objekt och för detta används tre nya strängvariabler som parametrar.

Samla in XMLList-data

HTML-informationen (ett XMLList-objekt) har följande format:

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

De första raderna i metoden rensar standard-XML-namnutrymmet:

default xml namespace = new Namespace();

Direktivet default xml namespace omfattar funktionens blocknivå. Det innebär att deklarationens omfattning är metoden buildItemHTML() .

Med de rader som följer samlas XMLList in utifrån strängargumenten som skickas till funktionen:

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;

Detta XMLList-objekt representerar strängdata och är lämpligt för ett HTML-textfält för ActionScript.

Metoden xmlLoaded() använder returvärdet för metoden buildItemHTML() och konverterar det till en sträng:

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

Extrahera titeln för RSS-matningen och skicka en anpassad händelse

Metoden xmlLoaded() anger en rssTitle -strängvariabel baserat på informationen i XML-datan för källan:

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

Slutligen genererar metoden xmlLoaded() en händelse som meddelar programmet att data har tolkats och är tillgängliga:

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