2013-10-10 81 views
0

我一直在擺弄了一會兒白衣這個問題,並希望有人得到我想要做的Actionscript過濾器的XML與可變

我有一個XML文件

<Results> 
    <Details> 
     <Id>1</Id> 
    </Details> 
    <StepResults> 
     <Step SeqNr="1"> 
      <Value>10</Value 
     </Step> 
     <Step SeqNr="2"> 
      <Value>100</Value 
     </Step> 
    </StepResults> 
</Results> 

現在我創建一個腳本,人們可以動態地解析它,可以說有人想要得到這個結果的id,他可以在後端添加一個變量,如下所示:[Details.Id],這將在actionscript中解析並從XML。

我分析它是這樣的:

var pattern:RegExp = /\[[A-Za-z\.0-9()=\[\]@]*\]/g; 
var possibleVars:Array = str.match(pattern); 
for each(var myVar:String in possibleVars){ 
    //Remove the blockquotes from the var (this would be the [Details.Id]) 
    var checkVar:String = myVar.substr(1,(myVar.length-2)); 
    var result:String = dotSyntax(xmlToParse,checkVar); 
} 

private function dotSyntax(target:XML, path:String):String { 
        //Split the var into different pars 
     var level:Array=path.split("."); 
     var curr:* = target; 
     for (var i:int = 0; i<level.length; i++) { 

      if(i==0 && curr[level[i]].length() <= 0){ 
       return ""; 
       break; 
      } 

      //Try to go trough the xml with the supplied var 
      curr=curr[level[i]]; 

     } 
        //return the value from the xml file (if all went well we have 1 here 
     return curr; 
    } 

現在,這真的像一個魅力,但我想給他們找到不同的步驟值的可能性,因此通常得到在ActionScript這個工作直接,你會過濾這樣的XML(如果你想步SeqNr = 2的值):

resXml.StepResults.Step.(@SeqNr==2).Value 

但我似乎無法得到這個與動態的變量。任何指針如何使用dotSyntax函數來做到這一點? (返回步驟seqnr2的值)

回答

0

有時它有助於在特定問題上寫下所有內容,我找到了解決方案。 對於像與動態變量過濾:

[resXml.StepResults.Step.(@SeqNr==2).Value 

我使用dotsyntax功能並增加了一個檢查,以查看是否==是可變內如果是的,我將檢查給定值的屬性:

if(level[i].search('==')>0){ 
    var filterArr:Array = level[i].split('=='); 
    curr = curr.(attribute(filterArr[0]) == filterArr[1]); 
}else{ 
curr=curr[level[i]]; 
}