2009-07-30 9 views
0

Ich versuche nur eine XML-Datei zu laden, die auf der Festplatte gespeichert werden kann, das habe ich getan, um sie zu durchsuchen, aber später, wenn ich versuche, die Datei zu laden, würde es nur Blick in den gleichen Pfad der sWF-DateiFlash AS3 Datei laden xml

hier ist der Code

package { import flash.display.Sprite; flash.events importieren. ; flash.net importieren.;

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); 
    } 
} 

}

, wenn ich eine XML-Datei öffnen, die es das gleiche Verzeichnis wie die SWF-Datei ist nicht, es mir eine unfound Dateifehler gibt. kann ich irgendetwas tun? Ursache zum Beispiel für mp3 gibt es eine besondere Klasse für das Laden der Datei, siehe http://www.flexiblefactory.co.uk/flexible/?p=46

dank

Antwort

1

Da Sie eine lokale XML-Datei geladen sind, werden Sie wollen FileStream.read() verwenden, anstatt eine URL Anfrage. Beachten Sie auch, dass file.name werden Sie nur den Namen der Datei, nicht den vollständigen Pfad, so was Sie tun möchten, ist:

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(); 
} 

Sie können das Filestream-Referenz (http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/flash/filesystem/FileStream.html) zu lesen, Wenn Sie eine große XML-Datei öffnen, müssen Sie sie asynchron lesen.

3

Beachten Sie, dass diese Antwort nur für AIR-Anwendungen funktioniert!

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(); 

Laden einer lokalen XML-Datei. Es könnte jemandem helfen ...