Flash AS3加载文件xml

时间:2009-07-30 15:05:56

标签: xml flash actionscript-3 file load

我只是想加载一个xml文件,这可能是hdd中的任何一个,这是我所做的浏览它,但后来当我试图加载文件时它只会看到相同的路径swf文件

这是代码

包{     import flash.display.Sprite;     import flash.events。;     import flash.net。;

public class cargadorXML extends Sprite {


    public var cuadro:Sprite = new Sprite();
    public var file:FileReference;
    public var req:URLRequest;
    public var xml:XML;
    public var xmlLoader:URLLoader = new URLLoader();

    public function cargadorXML() {
        cuadro.graphics.beginFill(0xFF0000);
        cuadro.graphics.drawRoundRect(0,0,100,100,10);
        cuadro.graphics.endFill();
        cuadro.addEventListener(MouseEvent.CLICK,browser);
        addChild(cuadro);

    }
    public function browser(e:Event) {

        file = new FileReference();
        file.addEventListener(Event.SELECT,bien);
        file.browse();

    }
    public function bien(e:Event) {
        xmlLoader.addEventListener(Event.COMPLETE, loadXML);
        req=new URLRequest(file.name);
        xmlLoader.load(req);
    }
    public function loadXML(e:Event) {
        xml=new XML(e.target.data);
        //xml.name=file.name;
        trace(xml);
    }
}

}

当我打开一个xml文件,它不是与swf相同的目录时,它会给我一个不正确的文件错误。 有什么我可以做的吗? 例如,对于mp3,有一个用于加载文件的特殊类,请参阅http://www.flexiblefactory.co.uk/flexible/?p=46

感谢

3 个答案:

答案 0 :(得分:3)

请注意,该答案仅适用于AIR应用程序!

答案 1 :(得分:1)

由于您正在加载本地xml文件,因此您需要使用FileStream.read()而不是URLRequest。另请注意,file.name只会为您提供文件的名称,而不是完整路径,因此您需要做的是:

 public function bien(e:Event) {
    var file:File = File.documentsDirectory.resolvePath(e.target);
    var fileStream:FileStream = new FileStream();
    fileStream.open(file, FileMode.READ);
    var prefsXML:XML = XML(fileStream.readUTFBytes(fileStream.bytesAvailable));
    fileStream.close();
}

您可能想要读取FileStream引用(http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/flash/filesystem/FileStream.html),如果要打开一个大的xml文件,则需要异步读取它。

答案 2 :(得分:0)

var cuadro:Sprite = new Sprite();
var file:FileReference;
var xml:XML;

function cargadorXML() {
    cuadro.graphics.beginFill(0xFF0000);
    cuadro.graphics.drawRoundRect(0,0,100,100,10);
    cuadro.graphics.endFill();
    cuadro.addEventListener(MouseEvent.CLICK,browser);
    addChild(cuadro);

}
function browser(e:Event) {

    file = new FileReference();
    file.addEventListener(Event.SELECT,bien);
    file.browse();

}
function bien(e:Event) {
    file.addEventListener(Event.COMPLETE, loadXML);
    file.load();
}
function loadXML(e:Event) {
    xml = new XML(e.target.data);
    trace(xml);
}

cargadorXML();

加载本地XML文件。 它可能对某人有帮助......