もう少しだけ QName の話題を続けます。
QName と child() メソッド
child() や attribute() を呼ぶときに修飾名を使う必要があれば QName を引数として渡すことができます。以下のサンプルを使って具体的に見てみましょう。
もう少しだけ QName の話題を続けます。
child() や attribute() を呼ぶときに修飾名を使う必要があれば QName を引数として渡すことができます。以下のサンプルを使って具体的に見てみましょう。
QName クラス (livedocs@lab) は XML の要素や属性の修飾名を扱うために使われます。QName のインスタンスは uri と localName という属性を持っています。それぞれ uri 属性は名前空間修飾子 localName 属性はローカル名の値を持ちます。
E4X では XML の名前空間も使用できます。ここで登場するNamespace クラス (livedocs@lab) は以前にアクセス制御の使用目的で紹介した名前空間の Namespace と同じものです。
今回は、以下のサンプルを使って名前空間で修飾された要素や属性へのアクセス方法を説明します。
属性値を取得するためのメソッドとしては attributes() と attribute() があります。
public attributes() : XMLList public attribute(attributeName:String) : *
今回は要素を扱うためのメソッドをいくつか紹介します。
1つ目は、child() メソッドです。child() メソッドは . (ドット)オペレータと組み合わせて使用します。引数には要素名を指定できます。次の例では myOrder.item.child("name") という使い方がされていますが、これは myOrder.item.name と同じ結果になります。
XML オブジェクトを文字列に変換するには toString() メソッドか toXMLString() メソッドを使います。どちらもほぼ同じ出力になりますが、テキストノードを出力しようとしたときだけ違う動きをします。toXMLString() ではタグ付きで出力されますが toString() の場合はコンテンツのみが出力されます。
前の記事で書いたように . や .. オペレータの結果は XMLList オブジェクトになります。この XMLList 内の XML オブジェクトを for 文を使って処理する方法を紹介します。for ... in と for each ... in の2種類のやり方があります。
AS3 では XML データの階層構造をたどって目的の要素にアクセスするのに . オペレータと .. オペレータを使用することができます。
どちらを使用した場合も、返される値の型は XMLList (livedocs@lab) です。 XML クラスはルートノードを一つしか持ちませんが XMLList クラスは複数持つことができます。メソッドは両者共通です。
E4X (ECMAScript for XML) は ECMAScript3 の拡張として開発された XML データを扱うための仕様です。2nd Edition が昨年末に公開されています(こちら)。AS3 では新しく E4X のクラスがサポートされ、従来よりもずっと簡単に XML データを扱うことができるようになりました。
AS3 でも AS2 で使われていた XML クラスは XMLDocument と名前を変えて他の関連クラス (XMLNode 等) と共に flash.xml パッケージに含まれています。しかし、これは過去に開発したコードのサポートが主目的で、今後の使用を推奨するものではありません。
さて、まず手始めに E4X の簡単な例を見てみましょう。以下のような XML 文書があるとします。