QName クラス
QName クラス (livedocs@lab) は XML の要素や属性の修飾名を扱うために使われます。QName のインスタンスは uri と localName という属性を持っています。それぞれ uri 属性は名前空間修飾子 localName 属性はローカル名の値を持ちます。
var qn:QName = new QName("www.sample.com/uri/", "myElementName"); trace(qn.uri); // www.sample.com/uri/ が出力される trace(qn.localName); // myElementName が出力される
name() メソッドと localName() メソッド
name() メソッドは XML オブジェクト(またはXMLList オブジェクト)の修飾名を、localName() メソッドはローカル名を取得するのに使用します。対象が XMLList オブジェクトの場合はリスト内に一つだけアイテムを持つオブジェクトである必要があります。
var myOrder:XML = <foo:order xmlns:foo="http://www.sample.com/foo/"> <foo:item id="1" quantity="1" xmlns="http://www.sample.com/bar/"> <name>fresh burger</name> <price>300</price> </foo:item> </foo:order>; // 修飾名とローカル名を取得する trace(myOrder.child(0).name()); // http://www.sample.com/foo/::item が出力される trace(myOrder.child(0).localName()); // item が出力される
name() メソッドの返す型は QName のため localName 属性を使用してもローカル名を取得できます。また名前空間の URI は uri 属性から取得できます。一方、プレフィックス(この場合は foo)情報は QName は持っていません。プレフィックスが必要な場合は namespace() メソッドを使用します。
trace(myOrder.child(0).namespace().prefix); // foo が出力される trace(myOrder.child(0).namespace().uri); // http://www.sample.com/foo/ が出力される trace(myOrder.child(0).name().uri); // http://www.sample.com/foo/ が出力される trace(myOrder.child(0).name().localName); // item が出力される trace(myOrder.child(0).localName()); // item が出力される
Qname および Namespace の uri 属性はプレフィックスがなくてもデフォルトの名前空間に属するオブジェクトには値が設定されます。例えば foo:item ノードではデフォルトの名前空間が宣言されています。そのため name ノードの QName を調べると以下のようになります。
trace(myOrder.child(0).child(0).name()); // http://www.sample.com/bar/::name が出力される
関連する名前空間がない場合 uri 属性は空文字になります。
setName() メソッドとsetLocalName() メソッド
setLocalName() メソッドはローカル名のみを引数の文字列と置き換えます。
trace(myOrder.child(0).name()); // http://www.sample.com/foo/::order が出力される myOrder.child(0).setLocalName("purchase"); trace(myOrder.child(0).name()); // http://www.sample.com/foo/::purchase が出力される
setName() メソッドは引数が文字列の場合修飾名を置き換えますが引数はローカル名として扱われます。
myOrder.child(0).setName("purchase"); trace(myOrder.child(0).name()); // purchase が出力される
setName() に引数としてQName オブジェクトを渡すと名前空間の宣言付きで置き換えることができます。
var myQN:QName = new QName("http://www.sample.com/baz/", "title"); myOrder.child(0).child(0).setName(myQN); trace(myOrder.child(0).child(0).toXMLString()); // <aaa:title xmlns:aaa="http://www.sample.com/baz/">fresh burger</aaa:title> が出力の変更分
aaa は自動的に振られたプレフィックスです。
コメントする