2012-07-30 49 views
1

我正在使用Flash CS6 - Adob​​e AIR 3.3: 而不是在我的XML中正好輸入我想要搜索的內容,我想使用動態變量可以更改爲搜索不同的類別和日期。下面是類似的代碼,我想使用:Adob​​e AIR 3.3或AS3:動態變量來搜索xml

var someCategory:String = new String("food"); 
var someDay:String = new String("monday"); 

var locationsLoader:URLLoader = new URLLoader(); 
locationsLoader.load(new URLRequest("http://www.myfile.xml")); 
locationsLoader.addEventListener(Event.COMPLETE, init); 

//load xml 

function init(e:Event):void 
{ 
theXML = new XML(e.target.data); 
theXML.ignoreWhitespace = true; 
e.currentTarget.close(); 

for(var i:int = 0; i < theXML.someCategory.length(); i++) 
{ 
if(theXML.someCategory[i].somdDay != "un") 
{ 
//do soemthing 
} 
} 

此代碼的工作目前僅如果我真的鍵入「對」「食品」和「星期一」和「如果」循環。有什麼建議麼?

的XML是...

<xml> 
<food> 
<monday>yes</monday> 
</food> 
<food> 
<monday>yes 2</monday> 
</food> 
<food> 
<monday>un</monday> 
</food> 

</xml> 

這裏是當前工作:

var someCategory:String = new String("food"); 
var someDay:String = new String("monday"); 

var locationsLoader:URLLoader = new URLLoader(); 
locationsLoader.load(new URLRequest("http://www.myfile.xml")); 
locationsLoader.addEventListener(Event.COMPLETE, init); 

//load xml 

function init(e:Event):void 
{ 
theXML = new XML(e.target.data); 
theXML.ignoreWhitespace = true; 
e.currentTarget.close(); 

for(var i:int = 0; i < theXML.food.length(); i++) 
{ 
if(theXML.food[i].monday != "un") 
{ 
//do soemthing 
} 
} 
+0

你有很多錯誤在你的代碼中,你可以請更正,例如somDay,我和someCategory這應該被鍵入爲字符串或是一個數組?你的XML在哪裏?顯示適合你的代碼。 – shaunhusain 2012-07-30 22:32:53

+0

對不起。是的,他們是字符串。我修復了XML,並顯示了當前的工作。 – user1129107 2012-07-30 22:45:19

+0

感謝您的糾正,請參閱下面的答案,相信這會很好地服務您的目的,而忽略將XML內聯並擺脫Loader等的事實,只是爲了便於檢查。 – shaunhusain 2012-07-30 23:14:00

回答

0

複製你的代碼,並通過改變由每一步一步的部分加強,似乎得到相同的結果與我所做的每一項改變都是如此,所以我相信以下是正確的。

package 
{ 
    import flash.display.Sprite; 

    public class TestAS3Project extends Sprite 
    { 
     public var theXML:XML = new XML(<xml> 
       <food> 
        <monday>yes</monday> 
       </food> 
       <food> 
        <monday>yes 2</monday> 
       </food> 
       <food> 
        <monday>un</monday> 
       </food> 

      </xml>); 
     public function TestAS3Project() 
     { 
      init(); 
     } 
     private function init():void 
     { 

      var someCategory:String = new String("food"); 
      var someDay:String = new String("monday"); 

      theXML.ignoreWhitespace = true; 

      for(var i:int = 0; i < theXML[someCategory].length(); i++) 
      { 
       if(theXML[someCategory][i][someDay] != "un") 
       { 
        //do soemthing 
        trace(theXML[someCategory][i][someDay]); 
       } 
      } 
     } 
    } 
} 
+0

謝謝 - 將括號中的變量固定。正在讓我瘋狂! – user1129107 2012-07-30 23:26:00

+0

沒問題,請接受,如果你可以,它可以解決你的問題。在E4X上有一個很好的網站http://www.senocular.com/flash/tutorials/as3withflashcs3/?page=4我只是想知道如果你需要使用方括號可以訪問類的成員訪問/調用時的字符串。 – shaunhusain 2012-07-30 23:38:42

+1

長期來說,使用elements(),而不是方括號中的節點名稱可能會更好一些,因爲如果您發現有一個節點缺少具有給定名稱的子節點,它將會炸燬。 – 2012-07-31 01:39:33

0

我會用一個條件語句,並使用for each循環,而不是一個for循環:

var cat:String = new String("food"); 
var day:String = new String("monday"); 

for each (var node:XML in theXML[cat].(child(day) != 'un')) { 
    trace(node[day]); 
} 

theXML[cat].(child(day) != 'un')部分是指

(環)theXML的每個孩子節點名稱[貓]具有節點名稱的子節點[日期]其值不是'un'。