XMLStore
これはなに?
XML と AS オブジェクトの相互変換を行うライブラリです. MIT ライセンスです.
- 任意のクラスの変換処理を書ける.
- 変換処理はクラスに依存しない.そのため――
- 同じクラスに複数の変換方法を用意できる.
- 既存のクラスを変換できる.
- 上手く書けば XML → Object 、Object → XML の変換をまとめて書ける.
使用例
import org.libspark.xmlstore.XMLStore; ... var store:XMLStore = new XMLStore(); store.register(PointXMLStorePart()); // 任意クラスの変換を実装できます. var pt:Point = new Point(10, 20); var xml:XML = store.toXML(pt); var pt2:Point = store.fromXML(pt);
PointXMLStoreクラスの実装
package org.libspark.xmlstore.parts {
import flash.geom.Point;
import org.libspark.xmlstore.XMLStorePart;
public class PointXMLStorePart extends XMLStorePart {
public function PointXMLStorePart() {
super(Point);
}
override protected function convert():void {
super.convert();
copyProperty("x", Number);
copyProperty("y", Number);
}
}
}
生成したXML
<Point type="flash.geom.Point"> <x type="Number">20</x> <y type="Number">30</y> </Point>
リポジトリ
http://www.libspark.org/svn/as3/XMLStore/
http://www.libspark.org/svn/as3/XMLStore/xmlstore.swc
変更履歴
- 2009/11/15
- 初版公開
XMLStore
変換処理は XMLStore クラスを用いて行います.
XMLStore 単体では Number, String, Boolean, Array の変換しか行えませんが、 変換したいクラスに対応した XMLStorePart のサブクラスを実装することで、 任意のクラスを変換できます.
XMLStorePart のサブクラスは register で登録します.
import org.libspark.xmlstore.XMLStore; ... var store:XMLStore = new XMLStore(); store.register(PointXMLStorePart()); // 任意クラスの変換を実装できます. var pt:Point = new Point(10, 20); var xml:XML = store.toXML(pt); var pt2:Point = store.fromXML(pt);
XMLStorePart
任意のクラスの変換処理を記述するには、XMLStorePart のサブクラスを作成します. XMLStorePart のコンストラクタに変換対象のクラスを渡し、convert をオーバーライドして実際の変換処理を書きます.
copyProperty 関数を使用すると変換の方向に依存しないで変換処理を書けます. XML→オブジェクト、オブジェクト→XMLの変換が一つの記述で実現できます.
convert 内ではほかに以下の protected なプロパティを使用することができます.
- direction 変換の方向を表す.方向に依存する処理を書くときはこれを参照する.
- from 変換元
- to 変換先
- xml 変換方向によらず、XML を返す
- object 変換方向によらず、オブジェクトを返す
package org.libspark.xmlstore.parts {
import flash.geom.Point;
import org.libspark.xmlstore.XMLStorePart;
public class PointXMLStorePart extends XMLStorePart {
public function PointXMLStorePart() {
super(Point);
}
override protected function convert():void {
super.convert();
copyProperty("x", Number);
copyProperty("y", Number);
}
}
}
作ったのは
[ひだちのいろ](mail:hidachinoiro@ぢーめーる)

