ActionScript 3 - 标识子字符串

时间:2013-01-15 08:35:06

标签: actionscript-3 flash

我有一个xml文件(在下面编辑),其中包含一些欧洲国家的数据:

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>

我需要能够将国家/地区名称隔离为变量,以便稍后我说 '如果国家=奥地利,就这样做。'

我该如何解决这个问题?

谢谢,

布鲁斯

4 个答案:

答案 0 :(得分: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[countryXML.@id] = countryXML.toString();
}

现在,您可以写下您的情况:

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

答案 1 :(得分:1)

xmlData.recordSet.Austria;

就是这样...... 如果它不是一个单词:

xmlData.recordSet["Czech Republic"];

答案 2 :(得分: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>

好的 - 谢谢。我认为虽然我需要的是知道*通用术语*是什么,在这种情况下是各个国家的名称。

        <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路由不起作用。

答案 3 :(得分:0)

据我了解,bar与国家及其数据相关联。 因此,您可以使用适当的数据变量创建Sprite的类Bar扩展:

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 (myBar.data.@id == "Austria")
    doSomething();

希望,这会有所帮助。