2

我设计了一个应用程序,它将信息从 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 对象时,我得到了这个。

调试图像

我现在如何访问 XML 元素?这里有什么需要改变的吗?

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

更新
这是我正在使用的项目。

http://min.us/mvkoXsU

4

2 回答 2

2

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

我从未使用过 ArrayCollection,但我认为您需要遍历(for 循环)您的 XMLList 并手动将 ArrayCollection 放在一起。

于 2011-02-09T13:34:59.127 回答
1

您现在遇到的问题是您将 XMLList 视为 XML。

// 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

试试看。

于 2011-02-09T12:54:31.783 回答