Przykładowa aplikacja RSSViewer ilustruje szereg aspektów pracy z danymi XML w języku ActionScript, a w szczególności:
Format RSS, oparty na strukturze danych XML, jest szeroko stosowany do syndykacji wiadomości. Oto przykład prostego pliku danych 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>
Aplikacja SimpleRSS odczytuje dane RSS z Internetu, wykrywa w danych nagłówki (tytuły), łącza i opisy oraz zwraca te dane. Klasa SimpleRSSUI udostępnia interfejs użytkownika i wywołuje klasę SimpleRSS, która realizuje pozostałe operacje przetwarzania danych XML.
Aby pobrać pliki tej przykładowej aplikacji, należy przejść na stronę
www.adobe.com/go/learn_programmingAS3samples_flash_pl
. Pliki aplikacji RSSViewer znajdują się w folderze Samples/RSSViewer. Aplikacja składa się z następujących plików:
File
|
Opis
|
RSSViewer.mxml
lub
RSSViewer.fla
|
Główny plik aplikacji w formacie Flash (FLA) lub Flex (MXML).
|
com/example/programmingas3/rssViewer/RSSParser.as
|
Klasa zawierająca metody korzystające z elementów specyfikacji E4X w celu przeanalizowania danych RSS (XML) i wygenerowania odpowiedniej ich reprezentacji w formacie HTML.
|
RSSData/ak.rss
|
Przykładowy plik RSS. Aplikacja jest skonfigurowana do odczytu danych RSS z sieci Web, z kanału Flex RSS obsługiwanego przez firmę Adobe. Można jednak w prosty sposób zmodyfikować aplikację tak, aby odczytywała dane RSS z tego dokumentu, w którym stosowany jest schemat nieznacznie różniący się od stosowanego w kanale Flex RSS.
|
Odczytywanie i analizowanie danych XML
Klasa RSSParser zawiera metodę
xmlLoaded()
, która konwertuje wejściowe dane RSS, przechowywane w zmiennej
rssXML
, na ciąg zawierający wynik w formacie HTML,
rssOutput
.
W pobliżu początku metody wybierana jest domyślna przestrzeń nazw XML, o ile źródłowe dane RSS wskazują domyślną przestrzeń nazw:
if (rssXML.namespace("") != undefined)
{
default xml namespace = rssXML.namespace("");
}
Następne wiersze zawierają pętlę analizującą wszystkie właściwości podrzędne
item
w danych źródłowych XML:
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);
}
Pierwsze trzy wiersze przypisują zmiennym wartości reprezentujące tytuł, opis i łącze z właściwości
item
danych XML. Następny wiersz zawiera wywołanie metody
buildItemHTML()
w celu pobrania danych HTML w postaci obiektu XMLList, z parametrami w postaci trzech nowych zmiennych typu String.
Konstruowanie danych XMLList
Dane HTML (obiekt XMLList) mają następującą postać:
<b>itemTitle</b>
<p>
itemDescription
<br />
<a href="link">
<font color="#008000">More...</font>
</a>
</p>
W pierwszym wierszu metody anulowany jest wybór domyślnej przestrzeni nazw xml:
default xml namespace = new Namespace();
Dyrektywa
default xml namespace
ma zasięg bloku funkcyjnego. Oznacza to, że zasięgiem tej deklaracji jest metoda
buildItemHTML()
.
W następnych wierszach obiekt XMLList jest konstruowany na podstawie argumentów typu String przekazanych do funkcji:
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;
Obiekt XMLList reprezentuje ciąg znaków odpowiedni do wyświetlania w polu tekstowym HTML w środowisku ActionScript.
Metoda
xmlLoaded()
pobiera wartość zwracaną przez metodę
buildItemHTML()
i konwertuje ją na ciąg znaków:
XML.prettyPrinting = false;
rssOutput = outXML.toXMLString();
Wyodrębnienie tytułu kanału RSS i wysłanie zdarzenia niestandardowego
Metoda
xmlLoaded()
przypisuje wartość zmiennej
rssTitle
typu String na podstawie informacji zawartych w źródłowych danych RSS (XML):
rssTitle = rssXML.channel.title.toString();
Na koniec metoda
xmlLoaded()
generuje zdarzenie, powiadamiając w ten sposób aplikację, że dane zostały przeanalizowane i są dostępne:
dataWritten = new Event("dataWritten", true);
|
|
|