File di caricamento Flash AS3 xml
-
05-07-2019 - |
Domanda
Sto solo provando a caricare un file xml che può essere ovunque nel hdd, questo è quello che ho fatto per sfogliarlo, ma più tardi quando sto provando a caricare il file sembrerebbe solo nello stesso percorso del file swf
ecco il codice
pacchetto { 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);
}
}
}
quando apro un file xml che non si trova nella stessa directory di swf, mi dà un errore di file infondato. c'è qualcosa che posso fare? perché ad esempio per mp3 esiste una classe speciale per il caricamento del file, vedi http: / /www.flexiblefactory.co.uk/flexible/?p=46
grazie
Soluzione
Dato che stai caricando un file xml locale, ti consigliamo di utilizzare FileStream.read () anziché un URLRequest. Nota anche che file.name ti darà solo il nome del file, non il percorso completo, quindi quello che vorrai fare è:
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();
}
Potresti voler leggere il riferimento FileStream ( http: //livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/flash/filesystem/FileStream.html ), se stai aprendo un file XML di grandi dimensioni, dovrai leggerlo in modo asincrono.
Altri suggerimenti
Nota che quella risposta funziona solo per le applicazioni AIR!
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();
Caricamento di un file XML locale. Potrebbe aiutare qualcuno ...