0

変換のための私の関数は次のとおりです。

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 はスタック オーバーフローをスローします。そのため、変換のための独自のメソッドを作成したいと思います。どうもありがとう!

4

1 に答える 1

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;
}
于 2010-08-20T13:41:48.250 に答える