0

我一直在修补这个问题,希望有人能得到我想要做的事情

我有一个 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 的值)

4

1 回答 1

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]];
}
于 2013-10-10T15:27:52.200 回答