在 ActionScript 中使用 XML 的示例:从 Internet 加载 RSS 数据
Flash Player 9 和更高版本,Adobe AIR 1.0 和更高版本
RSSViewer 范例应用程序说明了在 ActionScript 中使用 XML 的一些功能,其中包括:
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 应用程序从 Internet 上读取 RSS 数据,分析标题、链接和描述的数据,并返回这些数据。SimpleRSSUI 类提供了相应的用户界面,并会调用 SimpleRSS 类,从而执行所有 XML 处理。
若要获取此范例的应用程序文件,请参阅
www.adobe.com/go/learn_programmingAS3samples_flash_cn
。RSSViewer 应用程序文件位于 Samples/RSSViewer 文件夹中。该应用程序包含以下文件:
文件
|
说明
|
RSSViewer.mxml
或
RSSViewer.fla
|
Flash 或 Flex 中的主应用程序文件(分别为 FLA 和 MXML)。
|
com/example/programmingas3/rssViewer/RSSParser.as
|
一个类,包含的方法可以使用 E4X 遍历 RSS (XML) 数据并生成相应的 HTML 表示形式。
|
RSSData/ak.rss
|
一个 RSS 范例文件。该应用程序被设置为从 Web 上由 Adobe 托管的 Flex RSS 供给处读取 RSS 数据。不过,您也可以轻松更改该应用程序,使之从此文档读取 RSS 数据,此文档所用的架构与 Flex RSS 供给的架构略有不同。
|
读取和分析 XML 数据
RSSParser 类包含一个
xmlLoaded()
方法,该方法可将输入 RSS 数据(存储在
rssXML
变量中)转换为包含 HTML 格式的输出 (
rssOutput
) 的字符串。
如果源 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);
}
前三行代码只是设置字符串变量,以表示 XML 数据的
item
属性的标题、描述和链接属性。下一行随后调用
buildItemHTML()
方法,以 XMLList 对象形式获取 HTML 数据,并使用三个新的字符串变量作为参数。
组合 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 对象表示适用于 ActionScript HTML 文本字段的字符串数据。
xmlLoaded()
方法使用
buildItemHTML()
方法的返回值并将其转换为字符串:
XML.prettyPrinting = false;
rssOutput = outXML.toXMLString();
提取 RSS 源的标题并发送自定义事件
xmlLoaded()
方法根据源 RSS XML 数据中的信息设置
rssTitle
字符串变量:
rssTitle = rssXML.channel.title.toString();
最后,
xmlLoaded()
方法生成一个事件,通知应用程序数据已经过分析并且可用:
dataWritten = new Event("dataWritten", true);
|
|
|