Flex:读取包含主机列表的文件

时间:2012-08-09 11:31:31

标签: flex actionscript

我有一个连接到数据库的flex应用程序。有几个服务器运行数据库。目前,我有一个文本框“主机”和“端口”,用户可以在其中指定要连接的数据库。我想将其更改为带有主机列表的ComboBox。我知道如何在应用程序中对其进行硬编码,但我更希望应用程序在启动时读取xml(或其他)文件并使用其内容填充ComboBox(以防数据库IP在将来发生变化)。 XML看起来有点像:

<root>
   <host ip="123.123.123.123" port="1234"/>
   <host ip="255.255.255.123" port="2700"/>
   <host ip="18.12.65.123" port="1270"/>
</root>

我该怎么做?我想将该文件与应用程序一起托管在服务器上。

1 个答案:

答案 0 :(得分:0)

您应该从服务器加载文件(使用URLLoader类) 然后你可以读取加载器的数据。

例如:

private var loader:URLLoader;
private function init():void {
    loader=new URLLoader();
    loader.addEventListener(Event.COMPLETE, dataLoaded);
    loader.dataFormat=URLLoaderDataFormat.TEXT;
    var req:URLRequest=new URLRequest("http://my-server/path/to/file");
    loader.load(req);
}

private function dataLoaded(e:Event):void {
    loader.removeEventListener(Event.COMPLETE, dataLoaded);
    var data:String=loader.data;

    //If the file is a flat text file (with 123.123.123.123:1234 on each line)
    var lines:Array=data.split("\n");
    for each(var line:String in lines) {
        var i:Array=line.split(":");
        trace("ip: " + i[0]);
        trace("\nport: " + i[1]);
    }

    //If the file is an xml, do this
    var x:XML=new XML(data);
    for each(var host:XML in x.host) {
        trace("ip: " + host.@ip);
        trace("\nport: " + host.@port);
    }
}

是的,您可以使用相对网址