2011-11-26 70 views
0

伙计们,的Flex-的ActionScript: - XML解析

我有以下在ActionScript 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>; 

现在,我想读/解析该XML字符串,然后生成根据其各自的特性Flex控件(即按钮,标签)。

如何做到这一点?

谢谢。

回答

1
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

灿我们在一些arraycollection/dictionary中以名称 - 值对的形式进行存储?我无法做到这一点...... –

+0

啊,它很好地转换xml。然后你有o.Top.Component.getItemAt(index)将是一个对象(这是一个名称 - 值对基本上) –

+0

你是天才的人! Flex-guru :) ..你的soln工作顺利。从我+1和接受这个答案。再次感谢 :) –

0

使用DATAGROUP与返回基于您的XML的性能的的ClassFactory itemRendererFunction。你不需要有一个单独的步骤先把它变成对象。相反,只是做这样的事情:

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

更多关于使用自定义itemRendererFunction,检查出 http://help.adobe.com/en_US/flex/using/WS77c1dbb1bd80d3836ecbb5ec129ec77b1e1-8000.html#WS94F31173-40D5-4ddd-B7B3-17D02BD57EAF

有关访问通过E4X的XML的属性,请参阅 http://dispatchevent.org/roger/as3-e4x-rundown/