E4X (ECMAScript for XML) は ECMAScript3 の拡張として開発された XML データを扱うための仕様です。2nd Edition が昨年末に公開されています(こちら)。AS3 では新しく E4X のクラスがサポートされ、従来よりもずっと簡単に XML データを扱うことができるようになりました。
AS3 でも AS2 で使われていた XML クラスは XMLDocument と名前を変えて他の関連クラス (XMLNode 等) と共に flash.xml パッケージに含まれています。しかし、これは過去に開発したコードのサポートが主目的で、今後の使用を推奨するものではありません。
さて、まず手始めに E4X の簡単な例を見てみましょう。以下のような XML 文書があるとします。
<order>
<book id="1">
<title>learning AS3</title>
</book>
</order>
E4X では . や @ を使って要素にアクセスできます。上の XML 文が myOrder という XML オブジェクトに保持されているとすると、以下のような記述が可能です。
trace(myOrder.book.title); // learning AS3 が出力される trace(myOrder.book.@id); // 1 が出力される
また、同様にデータの更新を行うこともできます。
myOrder.book.title = "learning Flex";
myOrder.book.@id = 2;
trace(myOrder);
// 以下の内容が出力される
<order>
<book id="2">
<title>learning Flex</title>
</book>
</order>
その他、Namespace など名前空間をサポートするためのクラスもあります。XML クラスの仕様はこちらをご覧ください(livedocs@lab)。
XML オブジェクトの初期化
E4X では XML 文をそのままオブジェクトにアサインして初期化することができます。配列の初期化に [] を使用したりオブジェクトの初期化に {} を使用するのと同様に XML の初期化に <> が使えます。
myXML:XML =
<order>
<book ISBN="0123456789">
<title>learning AS3</title>
</book>
</order>
このとき、初期化データである XML 文の一部を変数にすることもできます。XML 文中に中括弧で囲んで変数を挿入すると、オブジェクトの初期化時に対応する文字列と置き換えられます。
var attrName:String = "ISBN";
var attrVal:String = "0123456789";
var tagName:String = "title";
var content:String = "learning AS3";
myXML:XML =
<order>
<book {attrName}={attrVal}>
<{tagName}>{content}</{tagName}>
</book>
</order>
trace(myXML);
// 以下の内容が出力される
<order>
<book ISBN="0123456789">
<title>learning AS3</title>
</book>
</order>
もちろんコンストラクタを使用することもできます。その場合は、引数に文字列を渡します。
var str:String = "<order>"
+ "<book ISBN="0123456789">"
+ "<title>learning AS3</title>"
+ "</book>"
+ "</order>";
var myXML:XML = new XML(str);

Leave a comment