Flex-ActionScript: синтаксический анализ XML - PullRequest
0 голосов
/ 26 ноября 2011

Люди,

У меня есть следующий код xml в ActionScript.

var xml:XML = <Top>
                <Component>
                   <type>Button</type>
                   <id></id>
                   <width>50</width>
                   <height>20</height>
                   <x>0</x>
                   <y>0</y>
                </Component>
                <Component>
                   <type>Label</type>
                   <id></id>
                   <width>30</width>
                   <height>10</height>
                   <x>0</x>
                   <y>0</y>
                </Component>
             </Top>;

Теперь я хочу прочитать / проанализировать эту строку XML, а затем сгенерировать элементы управления Flex (т. Е. Кнопки, метки) в соответствии с их соответствующими свойствами.

Как это сделать?

Спасибо.

Ответы [ 2 ]

1 голос
/ 26 ноября 2011
import flash.xml.XMLDocument;
import mx.rpc.xml.SimpleXMLDecoder;
public static function xmlToObject(x:XML):Object{
    var xmlStr:String = x.toString();
    var xmlDoc:XMLDocument = new XMLDocument(xmlStr);
    xmlDoc.ignoreWhite=true;
    var decoder:SimpleXMLDecoder = new SimpleXMLDecoder(true);
    var resultObj:Object = decoder.decodeXML(xmlDoc);
     return resultObj;
}

Я использую этот код для преобразования xml в Objects. Тогда ДЕЙСТВИТЕЛЬНО просто использовать xml.

Например, ваш xml будет выглядеть так:

var xml:XML = <Top>
                <Component>
                   <type>Button</type>
                   <id></id>
                   <width>50</width>
                   <height>20</height>
                   <x>0</x>
                   <y>0</y>
                </Component>
                <Component>
                   <type>Label</type>
                   <id></id>
                   <width>30</width>
                   <height>10</height>
                   <x>0</x>
                   <y>0</y>
                </Component>
             </Top>;

и

var o:Object=xmlToObject(xml);

var top:Object=o.Top;
var componentArrayC:ArrayCollection=top.Component;
for each(var cmp:Object in componentArrayC) {
    //You would have these properties:
    cmp.type;
    cmp.id;
    cmp.width;
    cmp.height;
    cmp.x;
    cmp.y;
}
0 голосов
/ 26 ноября 2011

Используйте DataGroup с itemRendererFunction, которая возвращает ClassFactory на основе свойств вашего XML. Вам не нужно иметь отдельный шаг, чтобы сначала превратить его в объекты. Вместо этого просто сделайте что-то вроде этого:

//yourXML is already populated with your XML
var dataSource:XMLListCollection = new XMLListCollection(yourXML.elements);
//yourDataGroup is defined elsewhere
yourDataGroup.dataProvider = dataSource;

Чтобы узнать больше об использовании пользовательской функции itemRenderer, посмотрите http://help.adobe.com/en_US/flex/using/WS77c1dbb1bd80d3836ecbb5ec129ec77b1e1-8000.html#WS94F31173-40D5-4ddd-B7B3-17D02BD57EAF

Информацию о доступе к свойствам XML через e4x см. В http://dispatchevent.org/roger/as3-e4x-rundown/

...