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 は将来的に参照の時に使用する修飾子です。混乱するかと思ったのですが、実際のコーディングの際、揃えておく方が普通かと思い、そのように記述しています。

Comments

Powered by Facebook Comments