假设您的 XML 类型定义由 获得的限定名称组成getQualifiedClassName(),实例化类型并根据需要应用属性。
由 xml 定义的显示对象的示例实例化:
package
{
import flash.display.DisplayObject;
import flash.display.Sprite;
import flash.utils.getDefinitionByName;
public class XmlParser extends Sprite
{
public var xml:XML = <objects>
<object type="flash.display::Sprite" x="0" y="0" width="100" height="100" />
<object type="flash.display::MovieClip" x="0" y="0" width="100" height="100" />
</objects>;
public function XmlParser()
{
for each (var object:XML in xml.children())
{
var type:Class = getDefinitionByName(object.@type) as Class;
var instance:DisplayObject = new type();
instance.x = object.@x;
instance.y = object.@y;
instance.width = object.@width;
instance.height = object.@height;
addChild(instance);
}
}
}
}
您还可以在序列化为 XML 时描述类型对象,然后通过迭代 XML 的属性将属性应用回对象实例,例如:
package
{
import flash.display.DisplayObject;
import flash.display.Sprite;
import flash.utils.getDefinitionByName;
public class XmlParser extends Sprite
{
public var xml:XML = <objects>
<object type="flash.display::Sprite" x="0" y="0" width="100" height="100" />
<object type="flash.display::MovieClip" x="0" y="0" width="100" height="100" />
</objects>;
public function XmlParser()
{
for each (var object:XML in xml.children())
{
var type:Class = getDefinitionByName(object.@type) as Class;
var instance:DisplayObject = new type();
addChild(instance);
for each (var attribute:XML in object.@*)
{
if(attribute.name() == "type") { continue; }
trace("setting: " + attribute.name() + " = " + attribute.toXMLString());
instance[attribute.name().toString()] = attribute.toXMLString();
}
}
}
}
}