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

//主類加載XML文件使用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); 

    } 
} 

}

在這裏,我實例化loadXML的類。但我無法訪問xml,y?我怎麼能做到這一點?

這是我的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> 

回答

3

你有XML有面色不喜歡XML :) 這裏應該怎麼看起來像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> 

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類編輯

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答案,希望我會幫你的。 –

+2

@Jevgenij Dmitrijev'私人函數handleXMLLoaded(e:Event):void {}'* – Taurayi

+1

修正了小錯誤,否則很好的答案 – shanethehat