如何在Flex饼图中显示分组的XML数据?

如何在Flex饼图中显示分组的XML数据?,xml,apache-flex,Xml,Apache Flex,我已经研究过使用GroupingCollections和AdvancedDataGrids对XML数据进行分组,但我不知道如何在图表中显示这些数据 基本上,我要做的是按照category字段对数据进行分组,这应该给我两行,一行在红色下面,一行在蓝色下面,一行在绿色下面。将此数据输入饼图时,应占用适当的空间(红色为1/2,蓝色和绿色各为1/4)。我不需要其他_数据字段,因为我希望使用组名(在本例中为类别)作为标注 有什么建议吗 样本数据: <row> <category>

我已经研究过使用GroupingCollections和AdvancedDataGrids对XML数据进行分组,但我不知道如何在图表中显示这些数据

基本上,我要做的是按照category字段对数据进行分组,这应该给我两行,一行在红色下面,一行在蓝色下面,一行在绿色下面。将此数据输入饼图时,应占用适当的空间(红色为1/2,蓝色和绿色各为1/4)。我不需要其他_数据字段,因为我希望使用组名(在本例中为类别)作为标注

有什么建议吗

样本数据:

<row>
  <category>red</category>
  <other_data>this shouldn't really matter</other_data>
</row>
<row>
  <category>blue</category>
  <other_data>this shouldn't really matter</other_data>
</row>
<row>
  <category>red</category>
  <other_data>this shouldn't really matter</other_data>
</row>
<row>
  <category>green</category>
  <other_data>this shouldn't really matter</other_data>
</row>

红色
这其实不重要
蓝色
这其实不重要
红色
这其实不重要
绿色
这其实不重要

我来试一试。也许有一种更优雅的方式,或者更高效的方式,但是

将XML转换为对象的ArrayCollection

{类别:“红色”,其他数据:“无所谓”} . .

从那里

var categoryGroup:GroupingCollection=new GroupingCollection();
categoryGroup.source=ac; // you're ArrayCollection

var grouping:Grouping=new Grouping();
var groupingField:GroupingField=new GroupingField("category");
grouping.fields=[groupingField];

categoryGroup.grouping=grouping;
categoryGroup.refresh();

var categoryAC:ArrayCollection=categoryGroup.getRoot() as ArrayCollection;

chart.dataProvider=categoryAC;
除此之外,你还得在图表上施点魔法

<mx:PieChart id="chart" height="100%" width="100%">
    <mx:series>
        <mx:PieSeries dataFunction="myDataFunction" labelFunction="myLabelFunction" labelPosition="callout"/>
    </mx:series>
</mx:PieChart>

这可能有点太重了,但它会起作用,并且可以扩展到其他场景。

@Mike我能够将数据拉入GroupingCollection并将其输出到AdvancedDataGrid(并且它被正确分组),但当我尝试定义图表的dataSource属性时,它会出错,不会显示。
public function myDataFunction(series:Series, item:Object, fieldName:String):Object
{
    return (item.children.length);
}

public function myLabelFunction(data:Object, field:String, index:Number, percentValue:Number):String
{
    return data.GroupLabel;
}