在 ActionScript 中使用 XML 的示例:从 Internet 加载 RSS 数据

Flash Player 9 和更高版本,Adobe AIR 1.0 和更高版本

RSSViewer 范例应用程序说明了在 ActionScript 中使用 XML 的一些功能,其中包括:

  • 使用 XML 方法以 RSS 供给的形式遍历 XML 数据。

  • 使用 XML 方法以 HTML 的形式组合 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);