- 2008年6月26日 18:44
- ActionScript 3.0
ホットペーパーのAPIを叩いて、返ってきたXMLを弄ろうと思い、
URLLoaderをつかってみた。
そこまではよかったんだけど、ノードを取ろうとすると空白が返ってくる...
この問題で30分くらいはまったので、メモとして残しておきます。
どうやら、読み込むXMにxmlns属性が付与されていると、ActionScriptではネームスペースを厳密に指定しないと取得できない。
なお、ここでのネームスペースはXMLノードに対してのものである。
以下FlashCS3ヘルプからの引用
XML オブジェクトの名前空間 : 名前空間により名前空間接頭辞と、名前空間を識別する URI (Uniform Resource Identifier) を関連付けます。接頭辞は、XML オブジェクト内の名前空間を参照する場合に使用されるストリングです。接頭辞が未定義の場合、XML がストリングに変換されたときに接頭辞が自動的に生成されます。
で、この名前空間があるおかげで、同一のノード名を扱うことができる代わりに、参照する際に特殊な指定をしなければならない。
このときの指定方法は、クラスや変数、メソッドで扱う場合と同じ:(コロン)を用いる
private function completeHandler(e:Event):void {
_xml = new XML(urlLoader.data)
var ns:Namespace = new Namespace("http://webservice.recruit.co.jp/HotPepper/")
for each(var _target in _xml.ns::shop.ns::name) {
trace(_target.text())
}
}
xmlをURLLoaderで読み込み、COMPLETEイベントで完了後、XMLオブジェクトを生成する。ここまでは問題ない。
次に必要になってくるのが、Namespaceの生成。トップレベルクラスなので、importする必要はない。
ホットペッパーのAPIで使われているxlmnsは"http://webservice.recruit.co.jp/HotPepper/"だったので、これをいれる。
次に参照だが、通常_xml.shopのように、ノードをつなげるところを、_xml.ns::shopのように、ネームスペースをクッションさせてやる
このようにすることで、きちんと取得することができる。



