ActionScript 内の XML の例:インターネットからの 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 アプリケーションは、インターネットから RSS データを読み取り、ヘッドライン(タイトル)、リンク、および説明のデータを解析し、そのデータを返します。 SimpleRSSUI クラスは UI を提供し、SimpleRSS クラスを呼び出します。SimpleRSS クラスはすべての XML 処理を行います。

このサンプルのアプリケーションのファイルを入手するには、 www.adobe.com/go/learn_programmingAS3samples_flash_jp を参照してください。 RSSViewer アプリケーションのファイルは、Samples/RSSViewer フォルダーにあります。 このアプリケーションは次のファイルで構成されています。

ファイル

説明

RSSViewer.mxml

または

RSSViewer.fla

Flash(FLA)または Flex(MXML)のメインアプリケーションファイル。

com/example/programmingas3/rssViewer/RSSParser.as

E4X を使用して RSS(XML)データにアクセスし、対応する HTML 表現を生成するメソッドが含まれているクラス。

RSSData/ak.rss

サンプル RSS ファイル。 アプリケーションは、アドビ システムズ社がホストする Flex RSS フィードで、Web から RSS データを読み取るように設定されています。 ただし、使用するスキーマが Flex RSS フィードのスキーマとやや異なるこのドキュメントの RSS データを読み取るように、簡単にアプリケーションを変更できます。

XML データの読み取りと解析

RSSParser クラスには、 rssXML 変数に保存されている入力 RSS データを HTML 形式の出力を含むストリングである rssOutput に変換する xmlLoaded() メソッドがあります。

ソース 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); 
}

最初の 3 行は、XML データの item プロパティの title、description、および link プロパティを表すストリング変数を単純に設定しています。次の行は、3 つの新しいストリング変数をパラメーターとして使用して 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);