Получение элементов Sub-XML для отображения круговой диаграммы - PullRequest
2 голосов
/ 09 февраля 2011

Я разработал приложение, которое будет загружать информацию из 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

Ответы [ 2 ]

2 голосов
/ 09 февраля 2011

На самом деле xml.books.stock.bookinfo получит вам XMLList узлов XML, и я думаю, что ваша ошибка связана с назначением этого XMLList экземпляру ArrayCollection или обработкой каждого элемента этого XMLList в виде массива, когда на самом деле они являются узлами XML.

Я никогда не работал с ArrayCollection, но я думаю, что вам нужно пройти (для цикла) ваш XMLList и собрать ArrayCollection вручную.

1 голос
/ 09 февраля 2011

Проблема, с которой вы столкнулись сейчас, заключается в том, что вы рассматриваете 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

Попробуйте.

...