Ejemplo de XML en ActionScript: Carga de datos RSS desde Internet

Flash Player 9 y posterior, Adobe AIR 1.0 y posterior

La aplicación de ejemplo RSSViewer muestra diversas características del trabajo con XML en ActionScript, incluidas las siguientes:

  • Uso de métodos XML para recorrer datos XML en forma de canal RSS.

  • Uso de métodos XML para crear datos XML en formato HTML para utilizarlos en un campo de texto.

Se ha extendido el uso del formato RSS para sindicar noticias en formato XML. El aspecto de un archivo de datos RSS simple será similar al siguiente:

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

La aplicación SimpleRSS lee datos RSS de Internet, analiza dichos datos en busca de titulares (títulos), vínculos y descripciones, y devuelve esos datos. La clase SimpleRSSUI proporciona la interfaz de usuario y llama a la clase SimpleRSS, que lleva a cabo todo el procesamiento de los datos XML.

Para obtener los archivos de la aplicación de este ejemplo, consulte www.adobe.com/go/learn_programmingAS3samples_flash_es. Los archivos de la aplicación RSSViewer se encuentran en la carpeta Samples/RSSViewer. La aplicación consta de los siguientes archivos:

Archivo

Descripción

RSSViewer.mxml

o

RSSViewer.fla

El archivo de aplicación principal en Flash (FLA) o Flex (MXML).

com/example/programmingas3/rssViewer/RSSParser.as

Una clase que contiene métodos que utilizan E4X para atravesar datos RSS (XML) y generan una representación HTML correspondiente.

RSSData/ak.rss

Un archivo RSS de ejemplo. La aplicación está configurada para leer datos RSS de Internet, en un canal RSS de Flex alojado por Adobe. No obstante, se puede modificar fácilmente para que lea datos RSS de este documento, que utiliza un esquema ligeramente distinto del que utiliza el canal RSS de Flex.

Lectura y análisis de datos XML

La clase RSSParser incluye un método xmlLoaded() que convierte los datos RSS de entrada, almacenados en la variable rssXML, en una cadena que contiene la salida en formato HTML, rssOutput.

Casi al principio del método, el código establece el espacio de nombres XML predeterminado si el origen de datos RSS incluye un espacio de nombres predeterminado:

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

Las líneas siguientes recorren el contenido del origen de datos XML, examinando cada propiedad descendente denominada 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); 
}

Las tres primeras líneas son simplemente un conjunto de variables de cadena para representar las propiedades de título, descripción y vínculo de la propiedad item de los datos XML. A continuación, la siguiente línea llama al método buildItemHTML() para obtener datos HTML en forma de objeto XMLList, utilizando las tres nuevas variables de cadena como parámetros.

Construcción de datos XMLList

Los datos HTML (un objeto XMLList) tienen la siguiente forma:

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

Las primeras líneas del método borran el espacio de nombres XML predeterminado:

default xml namespace = new Namespace();

La directiva default xml namespace tiene ámbito de nivel de bloque de función. Esto significa que el ámbito de esta declaración es el método buildItemHTML().

Las líneas siguientes crean el objeto XMLList basándose en los argumentos de cadena pasados a la función:

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;

Este objeto XMLList representa una cadena datos adecuada para un campo de texto HTML de ActionScript.

El método xmlLoaded() utiliza el valor devuelto por el método buildItemHTML() y lo convierte en una cadena:

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

Extracción del título del canal RSS y envío de un evento personalizado

El método xmlLoaded() establece una variable de cadena rssTitle a partir de la información de los datos XML RSS de origen:

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

Por último, el método xmlLoaded() genera un evento, que notifica a la aplicación que los datos ha sido analizados y están disponibles:

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