Home > ActionScript 3.0 > AS3 :: XML / XMLListのフィルタリング

AS3 :: XML / XMLListのフィルタリング

ActionScript 3.0では、E4X(ECMAScript for XML)をサポートしすることで、より柔軟で強力なフィルタリング機能を得ました。

ActionScript 2.0だとこの辺りが非常にややこしく、for地獄になりがちでしたが、ActionScript 3.0はかなりスマートです。

descendant accessor演算子

これは子孫演算子と呼ばれ、..で表します。

var doc:XML = 
<body>	<div id="head">
		<h1>Test</h1>
		<p>hello world</p>
	</div>
	<div id="content">
		<h2>Sample</h2>
		<p id="update">Example</p>
	</div>
</body>;

上記のようなXMLインスタンスdocに含まれるXMLListエレメントpにアクセスしようとしたとき、子孫演算子を使わなかった場合、以下のようにdot演算子を用いてアクセスできますが、そこまでの子孫を辿る必要があります。

doc.div.p

しかし、子孫演算子を用いれば次のように簡潔にアクセスすることが可能です。

doc..p

XMLインスタンスdocには、pが複数存在するため、以下のようなXMLListインスタンスが返ります。

<p>hello world</p>
<p id="update">Example</p>

では属性idを持つpにアクセスしたいとき、どうすればよいでしょうか?

parentheses (XML) 演算子

parentheses演算子は()で表し、選別述語演算子とも呼ばれます。()内に絞り込みの式を記述することでオペランドを評価し、等価だった場合XMLListを返します。

doc..p.(@id)//Example

一般的な記述は上記の通りで、属性値で絞り込む場合には@を接頭辞とします。これで期待値が返ってくるはずですが、多くの場合エラーが発生します。

ReferenceError: Error #1065: 変数 @id は定義されていません

parentheses演算子は実行時に対象を走査します。属性で絞り込む場合、属性が対象に必ずしもあるとは限りません。この場合、docでは、div#head内のpには属性idは定義されていないのです。

これを解決するにはhasOwnPropertyが有効です。

doc..p.(hasOwnProperty("@id"))//Example

Object.hasOwnPropertyメソッドを使うことで、属性が存在するか評価します。

Summer Camp 2010 野中文雄のActionScript 3.0による 三次元表現

無料  ActionScript 3.0による 三次元表現 in アップルストア 銀座

フィジカルコンピューティング ラボラトリー

Comments:0

Comment Form

コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。

Trackbacks:0

TrackBack URL for this entry
http://xingxx.com/mt/mt-tb.cgi/57
Listed below are links to weblogs that reference
AS3 :: XML / XMLListのフィルタリング from xingxx

Home > ActionScript 3.0 > AS3 :: XML / XMLListのフィルタリング

Search
Feeds
Tag Cloud

Return to page top