XMList とか連携とか。

LINEで送る
Pocket

最近、PHPとAS3との連携をさせるようなスクリプトを書いていまして、
その時のデータ連携時にXMLを使おうとしています。
AMFPHPなんかも便利とは思うのですが、なんかインストールが面倒なのと、XMLにしておけば他のアプリケーションとも連携をとりやすそうだ、と考えてXMLにしています。

で、今使っている流れとしては、

1.PHP側でデータを取得し、XMLに整形して出力

2. PHPが吐き出すXMLをswfに読み込んで、DataGridなり、Treeなりに登録

3. swfで、データを読み込み、
 はじめはXMLListとして読み込み、
 そのXMLListを若干成形したデータをXMLListCollectionに登録

という簡単なものです。

2.の処理ですが、データを同期させるために、XMLListCollectionクラスが大活躍しているのですが、
3のステップで、外部XMLをXMLListとして読み込む際に、

var list:XMLList = new XMLList( e.target.data );
とすればすっぽり使えるのに、
var list:XMLList = e.target.data as XMLList;
と書くとデータがnullになっていました。

同じようにデータを強制変換するときに使えるのか?と思い込んでいたのですが、全然違うみたいですね。

違いを調べないと。。

追記:

本当に恥ずかしいですが、『全く』違うものでした。

as (Adobe Flex 2 リファレンスガイド 『演算子』 as の項参照)———————————————-

使用法
expression as datatype

最初のオペランドで指定された式が、2 番目のオペランドで指定されたデータ型のメンバーであるかどうかを評価します。最初のオペランドがそのデータ型のメンバーである場合、結果は最初のオペランドになります。それ以外の場合、結果の値は null です。

2 番目のオペランドで使用される式は、評価結果がデータ型となる必要があります。

オペランド
expression:* — 指定されたデータ型に対してチェックする値。
datatype:Class — expression オペランドの評価に使用されるデータ型。型指定がないことを表す特殊な * 型は使用できません。

結果
Object — expression が datatype で指定されたデータ型のメンバーである場合、結果は expression になります。それ以外の場合、結果の値は null です。

—————————————————————————–

asは要するに型チェックをして、同じ場合はデータをそのまま利用できて、違う場合はnullを返す、ということですね。
だから、e.target.dataとして取得した型が違うものなので当然nullを返す。

一方、new XMLList()の場合は、new String( int )で変換してくれるように、型変換してくれるので望み通りデータの利用が可能、ということですな。

ああ、恥ずかしい。

2007年9月2日02:17

サーバーへのXML保存

LINEで送る
Pocket

ちょいとはまりましたので記録として。

AS3でXMLを保存するときに、XMLのままでは何なので、Stringに変換し、POSTで送信。

これをPHP側で保存していたのですが、どうやらサーバーへ送られて、PHPで取得するときには、属性(attribute)の『”』がエスケープされてしまっている。

確かにセキュリティを考えればいい事なのですが、このままではXMLとして保存できないので、

PHP側で stripslashesして保存。

すると無事にXMLらしく保存完了!!

でも、stripslashesしないといけないということは、セキュリティ上の対策を施すべきかなあ??
Flexからとわかる識別子をつけるとか。。。。

2007年9月1日02:11