<SectorMain>
<Object1 id="1" desc="Объект №1">
<id>1</id>
<sub_id>0</sub_id>
<center_x>48</center_x>
<center_y>48</center_y>
<name>17</name>
<img_path>graphic</img_path>
<img_name>img1</img_name>
<img_ext>png</img_ext>
</Object1>
<Object2 id="2" desc="Объект №2">
...
XML-файл загружается в сцену через URLLoader и парсится стандартным обходом всего дерева:
var Loader:URLLoader = new URLLoader();
var Request:URLRequest = new URLRequest();
Request.method = URLRequestMethod.POST;
Loader.dataFormat = URLLoaderDataFormat.TEXT;
Request.url = "файл XML";
Loader.addEventListener(Event.COMPLETE,O
Loader.load(Request);
protected function OnComplete(e:Event):void {
InfoLoader.removeEventListener(Event.COM
var SectorData:XML = new XML(e.target.data);
CreateFromXML(SectorData);
}
protected function CreateFromXML(Data:XML):void {
for each (var Node:XML in Data.*) {
if(Node.nodeKind()=="element") {
// Обработка каждого узла XML-дерева
}
}
}
Загрузив описание сцены и пропарсив XML-документ, встает вопрос: как при обработке узлов дерева по текстовому названию Object1 создать экземпляр класса Object1 и заполнить его нужными свойствами? На помощь приходит функция getDefinitionByName(ClassName:String) которая и решает эту задачу. Однако в ее работе присутствует следующая особенность: имя класса нужно указывать полностью, вместе с именем package которому данный класс принадлежит, даже если класс включен в package в котором вызывается getDefinitionByName.
Создание класса по имени будет выглядеть следующим образом:
var ClassReference:Class = getDefinitionByName("PackageName."+Node.n
var Instance:Object = new ClassReference();
В итоге Instance и будет экземпляром класса Object1