2011-02-09 48 views
2

我設計了一個應用程序,該應用程序將信息從XML文件加載到餅圖。檢索子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"; 

UPDATE
這裏是我處理的項目。

http://min.us/mvkoXsU

+0

你可以把完整的代碼(或鏈接到它),所以我們可以自己運行它?我建議先閱讀XMLList(調試確保其正確),然後將其轉換爲數組(如果你喜歡的話)。 var _xmlList:XMLList = evt.result.books.stock; – Ryan 2011-02-09 18:22:50

+0

@Brian:我通過鏈接到項目更新了答案 – 2011-02-10 05:14:08

回答

2

其實xml.books.stock.bookinfo會爲您提供XML節點的XMLList,我認爲您的錯誤來自將該XMLList分配給ArrayCollection實例,或者將該XMLList的每個項目視爲Array實際上它們是XML節點。

我從來沒有使用ArrayCollection,但我認爲你需要遍歷(for循環)你的XMLList,並手動放在一起ArrayCollection。

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 

試試看。