AS3で複数の名前空間を処理しつつ、デフォルトの名前空間を指定して参照時の記述を省略する
2010 年 3 月 13 日 土曜日XMLを介したI/F仕様を決める際、名前空間を指定することがほとんどないのですが、既存サービス等で、指定済みのフィードに出くわすと、普段当たり前にできていたエレメントの参照ができず、一瞬面食らってしまいます。以後、同じような状況で頭がフリーズしてしまわないように、要所だけメモ。
名前空間を指定する
まず、xmlns:~で指定されている部分を使ってNamespace型のインスタンスを作成します。(xmlnsがhttp://foo.com/fooの場合)
var ns:Namespace = new Namespace(”http://foo.com/foo”);
参照するxmlインスタンス(例として xmldata )が存在していれば、以下のような記述でも可能です。
var ns:Namespace = new Namespace(xmldata.namespace());
これにより、
xmldata.ns::foo
xmldata.foo.ns::element
xmldata.foo.@ns::attribute
的なアクセスが可能になります。
デフォルト指定で記述を楽にする
更に、このnsをデフォルト指定したければ、この一行を追加。
default xml namespace = ns;
これにより、上記のアクセスが以下のような形でアクセス可能になります、。
xmldata.foo
xmldata.foo.element
xmldata.foo.@attribute
複数の名前空間にも対応
先程と同じ要領で、新たにNamespaceインスタンスを作成
var ns2:Namespace = new Namespace(xmldata.namespace(”ns2″));
※右辺の”ns2″は xmlns:ns2 = “http://foo.~” となっていた場合の例で、左辺の var ns2 は将来的に参照の時に使用する修飾子です。混乱するかと思ったのですが、実際のコーディングの際、揃えておく方が普通かと思い、そのように記述しています。

