|
E4X でネームスペースがあると、処理が面倒なので、なんとかして欲しいです。E4XをFlexで使う時に見るべきサイトのリンクをメモしておきます。
以下、上記を見て作りました。 Flex3でこのブログのRSSをグリッドに表示するプログラム例:
<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication
xmlns:mx="http://www.adobe.com/2006/mxml"
layout="absolute"
initialize="dl.send()">
<!-- data -->
<mx:HTTPService id="dl"
url="http://d.aoikujira.com/blog/page/get/rss"
resultFormat="e4x"
result="onResult()"/>
<mx:ArrayCollection id="rss_data"/>
<!-- ui -->
<mx:DataGrid id="rss_grid"
width="100%" height="100%"
dataProvider="{rss_data}">
<mx:columns>
<mx:DataGridColumn dataField="title" headerText="タイトル"/>
<mx:DataGridColumn dataField="date" headerText="日付"/>
<mx:DataGridColumn dataField="link" headerText="リンク"/>
</mx:columns>
</mx:DataGrid>
<mx:Script>
<![CDATA[
import mx.collections.XMLListCollection;
namespace rdf = "http://www.w3.org/1999/02/22-rdf-syntax-ns#";
namespace rss = "http://purl.org/rss/1.0/";
namespace dc = "http://purl.org/dc/elements/1.1/";
namespace content = "http://purl.org/rss/1.0/modules/content/";
private function onResult():void {
var result_xml:XML = XML(dl.lastResult);
for each (var x:XML in result_xml.rss::item) {
var o:Object = {
title: x.rss::title,
date: x.dc::date,
link: x.rss::link
};
rss_data.addItem(o);
}
}
]]>
</mx:Script>
</mx:WindowedApplication>
「ネームスペース::タグ名」の形でアクセスする必要があるので注意が必要です。また、一番ハマったのは、XML上では、ネームスペースがない普通のタグと思っても、デフォルトでネームスペースが設定されている「xmlns="http://xxx"」場合は、そのネームスペース::タグ名でアクセスしないと正しく値を取得できません。 例えば、デフォルトのネームスペースが設定されているとき、「<item><title>xxx</title></item>」のtitleにアクセスするには、「item.title」とするのではダメで、一度「namespace def="http://default/namespace/uri"」としてネームスペースを定義した上で「def::item.def::title」と記述しなくてはなりません。 関連記事:
コメント→コメント編集
|