E4Xまじやばい

初めてのActionScript 3.0 ―Flashユーザーのためのステップアップガイドを読んでいたら、E4Xがやばすぎた。
いままではXMLをオブジェクトとして扱える機能だと思っていたけど、全然違った。

XML要素を作る

var xml  = <product>
              <model stock="yes">
	        <name>foo</name>
	        <price>100</price>
              </model>

              <model stock="no">
	        <name>bar</name>
	        <price>200</price>
              </model>
           </product>;

へー、XMLをそのまま書けるのか。

子ノードへのアクセル

trace(xml.product.model.name); // -> ["foo","bar"]

リストが返ってくるのは多少驚きだけど、まだまだ大丈夫。

属性へのアクセス

trace(xml.product.@stock[0]); // -> ["yes"]

うん、属性は@だよね。普通、@は識別子に使えないけど、言語拡張なんだから使えてもいいよね。

子孫ノードへのアクセス

trace(xml..name); // -> ["foo","bar"]

うお! おいおい、なんだよ..演算子って。
XPathの//と同じ意味なのか。

条件式

trace(xml.model.(price < 150)); // -> ["foo"]

条件式まで書けるのか。すげーな。