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@ぢーめーる)