2011-07-08 7 views
1
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()); 
    } 
} 
} 

// classe principalefichier XML de chargement à l'aide AS3

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

    } 
} 

}

Ici, j'instancier la classe loadXML. Mais je ne peux pas accéder au xml, y? et comment puis-je y parvenir?

Voici mon fichier 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> 

Répondre

3

le xml que vous avez là cherche pas comme xml :) ici comment il devrait ressembler à la reffering 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> 

MISE À JOUR

vous ne pouvez pas faire comme ceci:

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

car le chargement d'un élément prend du temps et le script n'attend pas que le chargement ait été effectué.

Si vous voulez achive cela, vous devez le faire comme suit: dans la fonction d'édition de classe 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)) 
} 

dans l'édition de classe xmlFileView:

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]); 
} 
+1

eddited la réponse, l'espoir ça aidera. –

+2

@Jevgenij Dmitrijev 'private function handleXMLLoaded (e: Evénement): void {}' * – Taurayi

+1

Correction d'une petite erreur, sinon bonne réponse – shanethehat