2010-08-20 29 views
0

這裏是我的功能轉換:軟硬度:ArrayCollection中,以XML轉換,無需SimpleXMLEncoder

private function arrCol2XML(arrCol:ArrayCollection):XML 
{ 
var xml:XML=new XML(<root></root>); 
for (var i:Number=0; i<arrCol.length; i++) 
{ 
    var obj:Object=arrCol.getItemAt(i); 
    xml.appendChild(recursive(obj)); 
} 
return xml; 
} 

private function recursive(obj:Object, str:String='item'):XML 
{ 
var xml:XML=new XML('<' + str + '></' + str + '>'); 
if(obj is Array) 
{ 
    for (var tmpObj:Object in obj) 
    { 
    Alert.show(flash.utils.getQualifiedClassName(tmpObj) + " - " + str); 
// xml.appendChild(recursive(tmpObj as Object, 'item')); 
    } 
} else { 
    for (var property:String in obj) 
    { 
    if(obj[property] is Array) 
    { 
    xml.appendChild(recursive(obj[property] as Array, property)); 
    } else { 
    xml.appendChild(XML("<" + property + ">" + obj[property].toString() + "</" + property + ">")); 
    } 
    } 
} 
return xml; 
} 

這裏是我打電話給他們:這裏

Alert.show(arrCol2XML(acRoute).toXMLString()); 

到底是我的ArrayCollection:

objBlocat = {title:"Blocate", type:"nivel_blocat", children:[ 
{ title:"alege departament", type:"alege_departament", raspuns:'aaaa'} 
]}; 
acRoute = new ArrayCollection([objIesire, objBlocat]); 

而我目前的功能狀態輸出是:

<root> 
    <item> 
    <type>nivel_blocat</type> 
    <children/> 
    <mx_internal_uid>32F045BF-24B8-8AA8-3E8D-8F9BF92A0AFC</mx_internal_uid> 
    <title>Blocate</title> 
    </item> 
</root> 

以及警報:

int - children 

問:我怎樣才能解決這個問題,是有漏洞的API嗎? PS:我承認代碼不是直截了當的,因爲它根本行不通。 PPS:如果我的對象有一個屬性值引用其他對象,SimpleXMLEncoder會拋出堆棧溢出......所以這就是爲什麼我想爲自己的轉換編寫自己的方法 任何幫助將非常感激!非常感謝!

+0

你有彈性生成器(或類似的東西)?學習調試,逐步查看程序中發生的情況。 – alxx 2010-08-20 13:44:45

回答

0

解決它自己使用此爲遞歸():

private function recursive(obj:Object, str:String='item'):XML 
{ 
    var xml:XML=new XML('<' + str + '></' + str + '>'); 
    if(obj is Array && obj.length!=0) 
    { 
     var ac:ArrayCollection=new ArrayCollection(obj as Array); 
     var xml2:XML=new XML(<item></item>); 
     for (var i:Number=0; i<ac.length; i++) 
     { 
      var myObj:Object=ac.getItemAt(i); 
      for (var prop:String in myObj) 
      { 
       xml2.appendChild(new XML("<" + prop + ">" + myObj[prop] + "</" + prop + ">")); 
      } 
     } 
     xml.appendChild(xml2); 
    } else { 
     for (var property:String in obj) 
     { 
      if(obj[property] is Array) 
      { 
       xml.appendChild(recursive(obj[property] as Array, property)); 
      } else { 
       xml.appendChild(XML("<" + property + ">" + obj[property].toString() + "</" + property + ">")); 
      } 
     } 
    } 
    return xml; 
}