Загрузка XML-файла с использованием as3 - PullRequest
1 голос
/ 08 июля 2011
public class loadXML extends Sprite
{
    public var xmlFileName:String;
    public var urlL:URLLoader = new URLLoader();
    public var urlR:URLRequest;
    public var xml:XML = new XML();

    public function loadXML(xmlS:String):void
    {
        xmlFileName = xmlS;
        urlR =  new URLRequest(xmlFileName);            
        urlL.addEventListener(ProgressEvent.PROGRESS, onProgressAction);
        urlL.addEventListener(Event.COMPLETE, onLoadedAction);
        urlL.addEventListener(IOErrorEvent.IO_ERROR, errorAction);
        urlL.load(urlR);            
    }
    public function onLoadedAction(e:Event):void
    {
        xml = XML(e.target.data);
        //trace(xml);
    }       
    public function onProgressAction(e:ProgressEvent):void
    {
        //trace("loading xml");
    }
    public function errorAction(e:IOError):void
    {
        trace(e.toString());
    }
}
}

// основной класс

package
{
import com.loadXML;
import flash.display.Sprite;

public class xmlFileView extends Sprite
{
    public var xmlData:loadXML;
    public function xmlFileView():void
    {
        init();
    }
    private function init():void
    {
        xmlData = new loadXML("list.xml");
        var xmlF:XML = XML(xmlData);
        //trace(xmlF.video[0].path);

    }
}

}

Здесь я создаю экземпляр класса loadXML. Но я не могу получить доступ к XML, у? и как мне этого добиться?

вот мой XML-файл.

<?xml version="1.0" encoding="iso-8859-1"?>
<videos>
    <video>
        <path>video1.flv</path>
    </video>
    <video>
        <path>video2.flv</path>
    </video>
    <video>
        <path>video3.flv</path>
    </video>
    <video>
        <path>video4.flv</path>
    </video>
</videos>

1 Ответ

3 голосов
/ 08 июля 2011

xml у вас там не похож на xml :) вот как это должно выглядеть как trace(xmlF.video.path[0]);

<?xml version="1.0" encoding="utf-8" ?>
<data>
    <video>
        <path>video1.flv</path>
        <path>video2.flv</path>
        <path>video3.flv</path>
        <path>video4.flv</path>
    </video>
</data>

UPDATE

вы не можете сделать так:

xmlData = new loadXML("list.xml");
var xmlF:XML = XML(xmlData);

потому что загрузка чего-то занимает время, а скрипт не ждет, пока загрузка не будет завершена.

Если вы хотите достичь этого, вам нужно сделать это следующим образом: в функции редактирования класса loadXML:

public function onLoadedAction(e:Event):void
{
    xml = XML(e.target.data);
    // dispatch event when the XML has been loaded and xml value is defined.
    dispatchEvent ( new Event ( Event.COMPLETE ) )
}

в классе xmlFileView edit:

private function init():void
{
    xmlData = new loadXML("list.xml");
    // listen for loading completed
    xmlData.addEventListener ( Event.COMPLETE, handleXMLLoaded );
}

private function handleXMLLoaded (e:Event):void
{
   var xmlF:XML = xmlData.xml
   trace(xmlF.video.path[0]); 
}
...