2013-01-15 30 views
0

我有一個XML文件(以下編輯),其中包括對一些歐洲國家的數據:的ActionScript 3 - 確定一個子

xmlData = <dataSet> 
<recordSet> 
    <rd id="Austria">12.3,12.6,12.0,12.4,12.0,12.1,12.6</rd> 
    <rd id="Belgium">14.8,14.7,15.2,14.7,14.6,14.6,15.3</rd> 
    <rd id="Bulgaria">14.0,18.4,22.0,21.4,21.8,20.7,22.3</rd> 
    <rd id="Cyprus">16.1,15.6,15.5,15.7,15.3,15.3,14.5</rd> 
    <rd id="Czech Republic">10.4,9.9,9.6,9.0,8.6,9.0,9.8</rd> 
    ... 
</recordSet> 
</dataSet> 

我需要能夠將國名隔離作爲變量,這樣我可以後來說 '如果國家=奧地利,做這個'。

我該怎麼辦?

謝謝

布魯斯

+0

你如何解析你的XML? – Vesper

+0

這是什麼意思?我正在修改別人的代碼。謝謝。 –

+0

我想這就是你的意思:xml文件被加載到函數'onVarLoad'中 \t xmlData = new XML(evt.target.data); –

回答

1

使用動態對象那樣:

var xmlData:XML = <dataSet> 
     <recordSet> 
      <rd id="Austria">12.3,12.6,12.0,12.4,12.0,12.1,12.6</rd> 
      <rd id="Belgium">14.8,14.7,15.2,14.7,14.6,14.6,15.3</rd> 
      <rd id="Bulgaria">14.0,18.4,22.0,21.4,21.8,20.7,22.3</rd> 
      <rd id="Cyprus">16.1,15.6,15.5,15.7,15.3,15.3,14.5</rd> 
      <rd id="Czech Republic">10.4,9.9,9.6,9.0,8.6,9.0,9.8</rd> 
     </recordSet> 
    </dataSet> 

var map:Object = new Object(); 
for each (var countryXML:XML in xmlData.recordSet.rd) 
{ 
    map[[email protected]] = countryXML.toString(); 
} 

現在,你可以寫你的條件:

if (country == "Austria") 
{ 
    //do smth 
    trace(map[country]) 
} 
+0

謝謝 - 這看起來非常有前途。試圖使其工作... –

+0

「countryXML」如何隔離引號之間的文本?爲什麼我需要一個「對象」而不是字符串或文本字段? –

+0

對象很容易按國家等鍵值存儲變量。不明白,你想隔離哪些文字? –

0

感謝您的答覆。我離開我的辦公桌一個小時。我需要隔離國家名稱,例如奧地利。在某些情況下,這將是兩個字。通過「雙引號之間的,我的意思如下塞浦路斯和捷克共和國

 <rd id="Cyprus">16.1,15.6,15.5,15.7,15.3,15.3,14.5</rd> 
     <rd id="Czech Republic">10.4,9.9,9.6,9.0,8.6,9.0,9.8</rd> 

OK - 謝謝。我認爲,儘管我需要的是知道*通用術語*是什麼,在這種情況下是各個國家的名稱。

 <rd id="WhatAmICalled">16.1,15.6,15.5,15.7,15.3,15.3,14.5</rd> 

,這樣我可以再詢問這樣的:

 if (WhatAmICalled == Austria) 
      {eat a strudel} 
     else ... 
      { } 

換句話說,什麼是元素「WhatAmICalled」叫,以及如何隔離呢?

目的是選擇一個特定國家的條形圖(它是一個動畫條形圖),並對其應用特定的顏色,以及與所有其他國家/地區的條形圖顏色不同。

我確實有這個解決辦法,如果我有數據集只處理:

var myData:Number = dataArray[(numBars-1)-i][currentIndex]; 
    var myBar:Sprite = new Sprite(); 
     myBar.name = "bar"+i; 
     if (myBar.name == "bar10") 

...但不幸的是,在這種情況下,我使用多個數據集,以及國家出現以不同的順序,所以myBar.name路由不起作用。

1
xmlData.recordSet.Austria; 

就是這樣...... 如果它不是一個字:

xmlData.recordSet["Czech Republic"]; 
0

我的理解,與國家和它的相關數據吧。 所以,你可以創建相應的變量雪碧延長數據類酒吧:

public class Bar extends Sprite 
{ 
    public var data:XML; 

    public function Bar() 
    { 
     super();    
    } 
} 

當您初始化設置的酒吧像數據:

for (var i:int=0; i<xmlData.recordSet.rd.length(); i++) 
{ 
    var bar:Bar = new Bar(); 
    bar.data = xmlData.recordSet.rd[i];   
} 

現在每個酒吧都知道它的數據。你可以寫條件:

if ([email protected] == "Austria") 
    doSomething(); 

希望,這會有所幫助。