Flash AS3 загружает файл xml
-
05-07-2019 - |
Вопрос
Я просто пытаюсь загрузить XML-файл, который может быть где угодно на жестком диске, это то, что я сделал, чтобы просмотреть его, но позже, когда я пытаюсь загрузить файл, он будет выглядеть только по тому же пути, что и swf-файл
вот этот код
пакет { импортировать flash.display.Спрайт;импортируйте flash.события.;импорт 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
Спасибо
Решение
Поскольку вы загружаете локальный 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-файл, вам нужно будет прочитать его асинхронно.
Другие советы
Обратите внимание, что этот ответ работает только для приложений 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();
Загрузка локального XML-файла.Это могло бы кому-то помочь...