外部RSS2.0名前空間とNamespace
Flashで外部XMLファイルを読み込むときに、たとえばRSS2.0フィートの場合はRSS2.0形式の要素のルールがありますが、名前空間などを利用することで同じ階層に同名要素のタグを並べることができます。
Flashからの参照の仕方はいくつかありますが、アクションスクリプトで名前空間のNamespace変数を作成してダイレクトに参照する方法を利用しました。
もともとRSS2.0フィードのrssタグは、バージョン属性のみ保持できるコンテナ要素ですが、xmlnsとして名前空間の記述はhtmlでも馴染みがあります。
<html xmlns="http://www.w3.org/1999/xhtml">
これですね。DTDとはちょっとことなるのですが、XMLネームスペースはタググループがぶつからないように、識別させるための宣言のようなものでしょうか。
なので、FlashからXMLデータを参照する場合、通常のノード指定では値の取得や参照ができません。名前空間を指定することで、改めて取得することができます。
また、item要素はリストサマリーの配列となるので、ループ処理や配列で指定する必要があります。
今回はかなり端折ってしまいましたが、RSS2.0フィード内からイメージ画像を読み込んでいるURLを取得する方法です。ちなみに配列も含まれています。
【ActionScript3.0でRSS2.0フィード内のURLを取得:記述例】
var mLoader:URLLoader = new URLLoader();
var mRequest:URLRequest=new URLRequest("test.xml");
mLoader.addEventListener(Event.COMPLETE, xSetText);
mLoader.load(mRequest);
function xSetText(eventObject:Event) {
var cs4_xml:XML=XML(mLoader.data);// テキストをXMLデータに変換//
var ns:Namespace = new Namespace("http://purl.org/rss/1.0/modules/slash/");//rssヘッダのネームスペースURL
var contm:String=cs4_xml.channel.item.ns::contents[3].p.a.img.@src.toString();
var rssm:String=contm.toString();
trace(rssm)
}
URLLoaderクラスからXMLデータの取得まではなんの変哲もないソースですが、function内のXMLノード参照部分がわかりずらいので、解説しておきます。
var ns:Namespaceでは、名前空間の衝突をさけるためにrss内に記述されたxmlnsを直接参照して代入しています。
これでcontentsタグはコンフリクトすることなく参照ができるようになります。
ネームスペースを確保したので、今度はノードと配列を指定して、値を取得します。
var contm:String=cs4_xml.channel.item.ns::contents[3].p.a.img.@src.toString();
p.a.ima.@src.toString();
というのは、Pタグ⇒Aタグ⇒IMGタグというタグ階層を意味していて、@srcはIMGタグで参照している画像パスを、toString()は抽出するということですね。
リンクパスの場合は@srcを@hrefにすることで属性の参照できます。
とりあえずこれで、名前空間で指定されたタグ内からURLを取り出すことができました。