The RSSViewer sample application shows
a number of features of working with XML in ActionScript, including
the following:
The RSS format is widely used to syndicate news via XML. A simple
RSS data file may look like the following:
<?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>
The SimpleRSS application reads RSS data from the Internet, parses
the data for headlines (titles), links, and descriptions, and returns
that data. The SimpleRSSUI class provides the UI and calls the SimpleRSS
class, which does all of the XML processing.
To get the application files for this sample, see
www.adobe.com/go/learn_programmingAS3samples_flash
.
The RSSViewer application files can be found in the folder Samples/RSSViewer.
The application consists of the following files:
File
|
Description
|
RSSViewer.mxml
or
RSSViewer.fla
|
The main application file in Flash (FLA)
or Flex (MXML).
|
com/example/programmingas3/rssViewer/RSSParser.as
|
A class that contains methods that use E4X
to traverse RSS (XML) data and generate a corresponding HTML representation.
|
RSSData/ak.rss
|
A sample RSS file. The application is set
up to read RSS data from the web, at a Flex RSS feed hosted by Adobe.
However, you can easily change the application to read RSS data
from this document, which uses a slightly different schema than
that of the Flex RSS feed.
|
Reading and parsing XML data
The RSSParser class includes an
xmlLoaded()
method
that converts the input RSS data, stored in the
rssXML
variable,
into an string containing HTML-formatted output,
rssOutput
.
Near the beginning of the method, code sets the default XML namespace
if the source RSS data includes a default namespace:
if (rssXML.namespace("") != undefined)
{
default xml namespace = rssXML.namespace("");
}
The next lines then loop through the contents of the source XML
data, examining each descendant property named
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);
}
The first three lines simply set string variables to represent
the title, description and link properties of the
item
property
of the XML data. The next line then calls the
buildItemHTML()
method
to get HTML data in the form of an XMLList object, using the three
new string variables as parameters.
Assembling XMLList data
The HTML data (an XMLList object) is of the following form:
<b>itemTitle</b>
<p>
itemDescription
<br />
<a href="link">
<font color="#008000">More...</font>
</a>
</p>
The first lines of the method clear the default xml namespace:
default xml namespace = new Namespace();
The
default xml namespace
directive has function
block-level scope. This means that the scope of this declaration
is the
buildItemHTML()
method.
The lines that follow assemble the XMLList, based on the string
arguments passed to the function:
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;
This XMLList object represents string data suitable for an ActionScript
HTML text field.
The
xmlLoaded()
method uses the return value
of the
buildItemHTML()
method and converts it to
a string:
XML.prettyPrinting = false;
rssOutput = outXML.toXMLString();
Extracting the title of the RSS feed and sending a custom event
The
xmlLoaded()
method sets a
rssTitle
string
variable, based on information in the source RSS XML data:
rssTitle = rssXML.channel.title.toString();
Finally, the
xmlLoaded()
method generates an
event, which notifies the application that the data is parsed and
available:
dataWritten = new Event("dataWritten", true);
|
|
|