2012-07-23 70 views
0

我正在构建一个处理来自基于列的数据库的数据的应用程序。我以数组的形式获取数据,其中每个数组表示数据库返回的表中的列。数据包含父母,孩子的关系。所述阵列可以看起来像(每个阵列如在普通的SQL数据库中的行视图中相同的索引):ActionScript/Flex:从数组构建XML结构

[0] empty [1] empty [2] ID-A [3] ID-B [4] ID-B <-- this represents nodes' parents 
[0] ID-A [1] ID-A [2] ID-B [3] ID-C [4] ID-D <-- this represents nodes' labels 
[0] 100  [1] 200  [3] 300 [4] 150 [4] 150 <-- this represents values associated with nodes 

当然它们大得多。多达100000个元素。所有我想做的事,是创建的数据可以XML,我有:

<root> 
    <node label="ID-A" value="300"> 
     <node label="ID-B" value="300"> 
      <node label="ID-C" value="150"/> 
      <node label="ID-D" value="150"/> 
     </node> 
    </node> 
</root> 

请注意,对于ID-A有在顶层只有一个入口,它的价值是其所有项目的总和在数组中。

我不知道事先的结构深度和任何ID或值。如何创建XML,以便稍后能够在树形控件中显示它?我想要做的是循环访问数组,每次为ID添加一个节点(如果该ID不存在),而只是在ID存在时更新该值(将其添加到当前值)。我可以创建第一层,但是我无法在更大的深度访问和更新适当的元素。基本上,如何将我的ID-B下面添加一个ID-E的XML以上,以实现以下目标:

<root> 
    <node label="ID-A" value="300"> 
     <node label="ID-B" value="300"> 
      <node label="ID-C" value="150"/> 
      <node label="ID-D" value="150"/> 
      <node label="ID-E" value="sth"/> 
     </node> 
    </node> 
</root> 

还是会也许实际上是尤为明显,以建立一个ArrayCollection从阵列孩子我有?我是Flex的新手,所以我不能告诉自己什么会更有效。

+0

您正在使用哪个数据库?,您可以更改数据库结果的格式吗? – Imran 2012-07-24 04:08:27

回答

1

将100k行转换为XML可能会非常缓慢,并且XML占用大量内存,如果仅用作树数据提供程序,则会浪费大量内存。如果您只需要这样做来查看树中的数据,也许可以将其保存在数组中,但使用客户树dataDescriptor来定义层次结构。 http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/mx/controls/Tree.html#dataDescriptor

+0

将它转换为ArrayCollection会更快吗?我认为为我所拥有的数据类型定义一个自定义dataDescriptor可能非常棘手 – user1546927 2012-07-23 22:00:50