检索子XML元素以显示饼图

时间:2011-02-09 12:46:18

标签: xml flex actionscript-3 actionscript pie-chart

我设计了一个应用程序,它将XML文件中的信息加载到饼图中。

首先我的XML看起来像这样

<books>
   <stock>

    <booktype>Novels</booktype>
    <amountofbooks>100</amountofbooks>

   </stock>
</books>

我的AS代码看起来像

[Bindable]
private var bookStock:ArrayCollection = new ArrayCollection();

var myPieSeries:PieSeries = new PieSeries();
myPieSeries.nameField = "booktype";
myPieSeries.field = "amountofbooks";

result事件中我这样做

bookStock = evt.result.books.stock;

现在这完美无缺,我可以看到生成的饼图。

但现在让我说我以下列方式更改了XML。

<books>
   <stock>
        <bookinfo>
            <booktype>Fiction</booktype>
            <amountofbooks>150</amountofbooks>
        </bookinfo>     
    </stock>

   <stock>
        <bookinfo>
          <booktype>Novels</booktype>
          <amountofbooks>100</amountofbooks>
        </bookinfo> 
   </stock>

</books>

在结果事件中如何访问它?

bookStock = evt.result.books.stock.bookinfo;

不起作用。我得到一个“错误:未知属性:'bookinfo'。”

当我分析bookStock对象时,我得到了这个。

Debug Image

如何立即访问XML元素?这有什么需要改变的吗?

myPieSeries.nameField = "booktype";
myPieSeries.field = "amountofbooks";

更新
这是我正在合作的项目。

http://min.us/mvkoXsU

2 个答案:

答案 0 :(得分:2)

实际上xml.books.stock.bookinfo将为您提供XML节点的XMLList,我认为您的错误来自将XMLList分配给ArrayCollection实例,或者将该XMLList的每个项目都视为一个数组,实际上它们是XML节点。

我从未使用过ArrayCollection,但我认为你需要遍历(for循环)你的XMLList并手动组合ArrayCollection。

答案 1 :(得分:1)

您现在遇到的问题是您正在处理类似XML的XMLList。

// this works because there is only one XML node for each item in the chain
bookStock = evt.result.books.stock;

// how does this work?
bookStock = evt.result.books.stock.bookinfo;

// there are multiple stock nodes inside of "books"
bookStock = evt.result.books.stock[0].bookinfo;

trace(bookStock);//should trace the bookinfo from the first element

试一试。