ActionScript 中的 XML 範例:從網際網路載入 RSS 資料

Flash Player 9 以及更新的版本,Adobe AIR 1.0 以及更新的版本

RSSViewer 樣本應用程式示範在 ActionScript 中使用 XML 的多項功能,其中包括:

  • 使用 XML 方法,移動格式為 RSS Feed 的 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 應用程式會從網際網路讀取 RSS 資料,並剖析此資料以找出其中的標題、連結及說明,然後再傳回這些資料。SimpleRSSUI 類別可提供 UI 並呼叫 SimpleRSS 類別,如此便會執行所有的 XML 處理作業。

若要取得此樣本的應用程式檔案,請參閱 www.adobe.com/go/learn_programmingAS3samples_flash_tw。您可以在 Samples/RSSViewer 檔案夾中找到 RSSViewer 應用程式檔案,此應用程式是由下列檔案組成:

檔案

說明

RSSViewer.mxml

RSSViewer.fla

主應用程式檔案,在 Flash 中為 FLA,在 Flex 中為 MXML。

com/example/programmingas3/rssViewer/RSSParser.as

類別,其中包含使用 E4X 來移動 RSS (XML) 資料,並產生對應之 HTML 呈現格式的方法。

RSSData/ak.rss

樣本 RSS 檔案。這個應用程式是設定用來從網路 (Adobe 所提供的 Flex RSS Feed) 讀取 RSS 資料。然而,您可以輕鬆地將應用程式變更為從這份文件讀取 RSS 資料,它所使用的結構描述與 Flex RSS Feed 的結構描述不同。

讀取並剖析 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 屬性的 title、description 及 link 屬性。第四行便會呼叫 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 Feed 的標題及傳送自訂的事件

xmlLoaded() 方法會根據來源 RSS XML 資料中的資訊,設定 rssTitle 字串變數:

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

最後,xmlLoaded() 方法會產生事件,通知該應用程式此資料已經剖析,並且可供使用:

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