Exemplo XML no ActionScript: carregamento de dados RSS da Web

Flash Player 9 e posterior, Adobe AIR 1.0 e posterior

O aplicativo de exemplo RSSViewer mostra diversos recursos para trabalhar com XML no ActionScript, incluindo os seguintes:

  • Uso dos métodos XML para percorrer dados XML em forma de um feed RSS.

  • Uso dos métodos XML para montar dados XML em forma de HTML a ser usado em um campo de texto.

O formato RSS é muito utilizado para distribuir notícias via XML. Um arquivo de dados RSS simples pode ser parecido com o seguinte:

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

O aplicativo SimpleRSS lê os dados RSS na Internet, analisa os dados em busca de cabeçalhos (títulos), links e descrições e retorna esses dados. A classe SimpleRSSUI fornece a interface de usuário e chama a classe SimpleRSS, que faz todo o processamento XML.

Para obter os arquivos de aplicativo desse exemplo, consulte www.adobe.com/go/learn_programmingAS3samples_flash_br . Os arquivos do aplicativo RSSViewer estão localizados na pasta Amostras/RSSViewer. O aplicativo consiste nos seguintes arquivos:

Arquivo

Descrição

RSSViewer.mxml

ou

RSSViewer.fla

O arquivo principal do aplicativo no Flash (FLA) ou no Flex (MXML).

com/example/programmingas3/rssViewer/RSSParser.as

Uma classe que contém métodos que usam o E4X para percorrer dados RSS (XML) e gerar uma representação em HTML correspondente.

RSSData/ak.rss

Um arquivo RSS de exemplo. O aplicativo é configurado para ler dados RSS na Web, em um feed RSS do Flex hospedado pela Adobe. No entanto, você pode alterar o arquivo com facilidade para ler dados RSS neste documento, que usa um esquema ligeiramente diferente do feed RSS do Flex.

Leitura e análise de dados XML

A classe RSSParser inclui um método xmlLoaded() que converte os dados RSS de entrada, armazenados na variável rssXML , em uma string que contém a saída em formato HTML, rssOutput .

Logo do início do método, o código define o namespace XML padrão se os dados RSS de origem incluírem um namespace padrão:

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

As próximas linhas percorrem o conteúdo dos dados XML de origem, examinando cada propriedade de descendente chamada 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); 
}

As três primeiras linhas simplesmente definem variáveis de string para representar as propriedades de título, descrição e link da propriedade item dos dados XML. Em seguida, a próxima linha chama o método buildItemHTML() para obter os dados HTML em forma de um objeto XMLList, usando as três novas variáveis de string como parâmetros.

Montagem de dados XMLList

Os dados HTML (um objeto XMLList) têm uma das seguintes formas:

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

As primeiras linhas do método apagam o namespace XML padrão:

default xml namespace = new Namespace();

A diretiva de namespace XML padrão tem o escopo do nível de bloqueio da função. Isso significa que os escopo dessa instrução é o método buildItemHTML() .

As próximas linhas montam o XMLList, com base nos argumentos de string transmitidos para a função:

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;

Esse objeto XMLList representa dados de string adequados para um campo de texto HTML do ActionScript.

O método xmlLoaded() usa o valor de retorno do método buildItemHTML() e o converte em uma string:

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

Extração do título do feed RSS e envio de um evento personalizado

O método xmlLoaded() define uma variável de string rssTitle , com base nas informações dos dados XML RSS de origem:

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

Finalmente, o método xmlLoaded() gera um evento, que informa ao aplicativo que os dados estão analisados e disponíveis:

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