使用 as3 加载 XML 文件
Posted
技术标签:
【中文标题】使用 as3 加载 XML 文件【英文标题】:Loading XML file using as3 【发布时间】:2011-10-01 06:33:26 【问题描述】: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】:您那里的 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>
更新
你不能这样做:
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]);
【讨论】:
编辑了答案,希望对您有所帮助。 @Jevgenij Dmitrijevprivate function handleXMLLoaded (e:Event):void
*
kooooooo..... 非常感谢 Jevgenij Dmitrijev。你能解释一下,什么是“dispatcherEvent”?
查看这些链接以了解有关事件监听器的更多信息:gamedev.michaeljameswilliams.com/2009/02/06/…,jeffnehlsen.com/2011/02/actionscript-3-custom-events-explained以上是关于使用 as3 加载 XML 文件的主要内容,如果未能解决你的问题,请参考以下文章