2011-02-23 93 views
0

我讀在ActionScript HTTPService在一個XML文件,並把它變成這樣一個ArrayCollection(其中讀數是中繼節點和數據是根節點):如何從Actionscript Arraycollection讀取XML屬性?

graphData = new ArrayCollection([event.result.data.readings]); 

不過,我想改變即時通訊讀取的XML文件的格式,將值作爲屬性而不是標籤之間的值(原因是我這樣做的原因是xml文件巨大,並且此方法只需要一行每個讀數具有5個屬性,而不是5打開並在不同的行上關閉標籤)。

它的載入進入數組集合,但我如何訪問屬性? 之前,我將訪問時間值以下說:

graphData.getItemAt(0).time 

所以我想它可能是那麼容易,因爲:

graphData.getItemAt(0)[email protected] 

但這並不工作,能不能做到?

+0

其實只是見過的最好的解決方案可能是加載數據作爲XML列表,而不是,這是唯一的辦法? – Taro 2011-02-23 01:49:15

+0

當你在下面的線上放置一個調試斷點時,你在graphData中看到了什麼:graphData = new ArrayCollection([event.result.data.readings]);您應該能夠在變量窗口中展開graphData以查看ArrayCollection中每個元素的對象類型?你可以從那裏自己看到如何解決這個問題,E4X在Flex中工作的方式有點神祕,但如果它「看到」具有給定名稱的多個節點,它會將它們返回到一個數組集合中,否則它將是一個Object,而不會更多信息很難說這裏出了什麼問題。 – shaunhusain 2011-02-23 01:52:30

+0

爲什麼不使用XMLListCollection?或者將XML轉換爲值對象並將其放入ArrayCollection中。或者甚至更好,重新處理您的服務,以便通過AMF返回Value Objects,並且根本不處理w/XML。 – JeffryHouser 2011-02-23 03:45:54

回答

0

代碼:

graphData = new ArrayCollection([event.result.data.readings])

在這一個值,這將是一個XMLList只需創建一個交流。我不確定你爲什麼想這麼做,但這可能不是你想到的。做這樣的事情:

var graphData:XMLList = event.result.data.readings; 
// Now get data for individual readings 
trace("time for first reading", graphData[0][email protected]); 
trace("time for second reading", graphData[1][email protected]); 
+0

謝謝你,是的道歉,我給的例子是在xml文件中只有一個項目的情況。我嘗試了你的建議,但它仍然不會工作,也許XML嘗試不正確的XML格式?其如下:<?XML版本= 「1.0」 編碼= 「UTF-8」 獨立= 「是」> ' \t <讀取臨時= 「37.506」 時間= 「1297642337200」/>' 另外,我是否需要將httpservice的格式更改爲e4x? – Taro 2011-02-24 02:13:52

+0

如果您打算使用XML語法在您的集合中進行導航/選擇,那麼您肯定希望將結果格式設置爲e4x而不是對象,但不幸的是它不適用於對象。 – Sophistifunk 2011-03-08 04:38:12