ActionScript 中的 XML 範例:從網際網路載入 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 應用程式會從網際網路讀取 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);
|
|
|