Пример XML в ActionScript: загрузка данных RSS из Интернета

Flash Player 9 и более поздних версий, Adobe AIR 1.0 и более поздних версий

Демонстрационное приложение RSSViewer обладает рядом возможностей, позволяющих работать с XML в ActionScript, включая следующее.

  • Использование методов XML с целью перевода XML-данных в форму RSS-канала.

  • Использование методов XML с целью компоновки XML-данных в форму HTML для последующего использования в текстовом поле.

Формат RSS широко используется для сбора новостей посредством XML. Простой файл с RSS-данными может выглядеть следующим образом:

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

Приложение SimpleRSS считывает RSS-данные из Интернета, делает анализ этих данных, выделяя заголовки (названия), ссылки и описания, а затем возвращает их. Класс SimpleRSSUI обеспечивает интерфейс пользователя и вызывает класс SimpleRSS, отвечающий за все этапы обработки XML.

Получить файлы приложения для этого примера можно на странице www.adobe.com/go/learn_programmingAS3samples_flash_ru. Файлы с образцами применения приложения RSSViewer можно найти в папке Samples/RSSViewer. Приложение состоит из следующих файлов.

File

Описание

RSSViewer.mxml

или

RSSViewer.fla

Основной файл приложения Flash (FLA) или Flex (MXML).

com/example/programmingas3/rssViewer/RSSParser.as

Класс, содержащий методы, использующие E4X для пересечения RSS (XML)-данных и создания соответствующего представления в HTML.

RSSData/ak.rss

Демонстрационный RSS-файл. Данное приложение настроено на считывание RSS-данных из Интернета по RSS-каналу Flex, управляемому Adobe. Однако очень просто можно изменить настройки приложения на считывание RSS-данных из этого документа, в котором применяется схема, слегка отличающаяся от схемы RSS-канала Flex.

Считывание и выполнение синтаксического анализа XML-данных

Класс RSSParser включает метод xmlLoaded(), который преобразует входные RSS-данные, хранимые в переменной rssXML, в строку rssOutput, содержащую выходные данные в формате HTML.

Если исходные RSS-данные включают пространство имени по умолчанию, незадолго до начала работы метода с помощью кода задается пространство имени XML по умолчанию.

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

Следующие строки впоследствии проходят через содержимое исходных XML-данных, исследуя каждое свойство более низкого уровня с именем 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); 
}

Первые три строки просто задают переменные для представления свойств заголовков, описаний и ссылок свойства item XML-данных. Следующая строка впоследствии вызывает метод buildItemHTML() для получения HTML-данных в форме объекта XMLList с помощью трех новых строковых переменных, выступающих в роли параметров.

Компоновка данных XMLList

HTML-данные (объект XMLList) имеют следующую форму:

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

Первые строки метода удаляют пространство имени xml по умолчанию:

default xml namespace = new Namespace();

Директива default xml namespace функционирует в пределах определенной области. Это означает, что областью действия данной декларации является метод buildItemHTML().

Строки, идущие после компоновки XMLList, на основе строковых аргументов передаются в функцию:

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;

Этот объект XMLList представляет строковые данные, подходящие для текстового поля HTML ActionScript.

Метод xmlLoaded() использует возвращаемое значение метода buildItemHTML() и преобразует его в строку:

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

Извлечение названия RSS-канала и отправка пользовательского события

Метод xmlLoaded() задает строковую переменную rssTitle на основе исходных XML-данных RSS-канала.

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

И, наконец, метод xmlLoaded() генерирует событие, которое уведомляет приложение о том, что синтаксический анализ данных выполнен и данные доступны:

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