天天看点

【AS3】Flash读取XML内容的方法(附加载一个视频的例子)

参考文章1:http://www.68design.net/Web-Guide/Flash/10228-1.html

参考文章2:http://blog.csdn.net/ak47zc123/article/details/5251616

假设外部的XML文件和SWF在同一目录里,叫my_video.xml内容是:

<?xml version="1.0" encoding="utf-8" ?>
<video_info>
    <video_name>视频1</video_name>
    <video_path>video/index1.flv</video_path>
</video_info>           

则在flash第一帧写: 

var myXML:XML = new XML();
var XML_URL:String = "my_video.xml";
var myXMLURL:URLRequest = new URLRequest(XML_URL);
var myLoader:URLLoader = new URLLoader(myXMLURL);
myLoader.addEventListener(Event.COMPLETE, xmlLoaded);

function xmlLoaded(event:Event):void
{
   myXML = XML(myLoader.data);
   var vp:String = myXML.video_path;
   trace(vp);//结果是:video/index1.flv
}
           

====================================================

如果XML里有多个重复的数据,比如my_videolist.xml内容是:

<?xml version="1.0" encoding="utf-8"?>  
<video_info>  
    <name addr="video/index1.flv">视频1</name>  
    <name addr="video/index2.flv">视频2</name>  
    <name addr="video/index3.flv">视频3</name>  
    <name addr="video/index4.flv">视频4</name>  
    <name addr="video/index5.flv">视频5</name>  
</video_info>            

flash里:

var myXML:XML = new XML();
var XML_URL:String = "my_videolist.xml";
var myXMLURL:URLRequest = new URLRequest(XML_URL);
var myLoader:URLLoader = new URLLoader(myXMLURL);
var my_Array:Array = new Array();
var my_Array2:Array = new Array();
myLoader.addEventListener(Event.COMPLETE, xmlLoaded);

function xmlLoaded(event:Event):void
{
	myXML = XML(myLoader.data);
	for (var i:Number = 0; i<myXML.name.length(); i++)
	{
		my_Array[i] = myXML.name[i];
		my_Array2[i] = myXML.name[i]. @ addr;//name标签的addr属性值
		trace(my_Array[i]+"的地址:"+my_Array2[i]);
	}
}           

输出结果:

视频1的地址:video/index1.flv

视频2的地址:video/index2.flv

视频3的地址:video/index3.flv

视频4的地址:video/index4.flv

视频5的地址:video/index5.flv

================================================

全部的视频播放代码如下:

//读取XML文件里的视频路径
var myXML:XML = new XML();
var XML_URL:String = "my_video.xml";
var myXMLURL:URLRequest = new URLRequest(XML_URL);
var myLoader:URLLoader = new URLLoader(myXMLURL);
myLoader.addEventListener(Event.COMPLETE, xmlLoaded);

//建立视频
var video:Video = new Video();
addChild(video);
var nc:NetConnection = new NetConnection();
nc.connect(null);
var ns:NetStream = new NetStream(nc);
ns.client = {};
ns.client.onMetaData = ns_onMetaData;

function xmlLoaded(event:Event):void
{
 myXML = XML(myLoader.data);
 var vp:String = myXML.video_path;//video_info.xml里有个标签叫<video_path>
 ns.play(vp);
 video.attachNetStream(ns);
}

//视频信息的获取和设置
function ns_onMetaData(item:Object):void
{
 trace(item.duration);//获取总时长
 trace(ns.time);
 // Resize video instance.
 video.width = item.width;
 video.height = item.height;
 // Center video instance on Stage.
 video.x = (stage.stageWidth - video.width) / 2;
 video.y = (stage.stageHeight - video.height) / 2;
 //ns.seek(20);//从第20秒开始播放
}

//侦听视频流的开始和末尾  
ns.addEventListener(NetStatusEvent.NET_STATUS, statusHandler);
function statusHandler(event: NetStatusEvent):void
{
 trace(event.info.code);
 if (event.info.code == "NetStream.Play.Stop")
 {
  goURL();
 }
}

function goURL()
{
 var my_req:URLRequest = new URLRequest("index_in2.aspx");
 navigateToURL(my_req,"_self");
}

/*
//需要在FLV视频里添加CuePoint(提示点)才可以用
//提示点不一定需要重新编辑视频,可以利用flvtool2等工具就可以写入
ns.client.onCuePoint = ns_onCuePoint;  
function ns_onCuePoint(item:Object):void {
    trace("cuePoint");
    trace(item.name + "\t" + item.time);
trace(ns.time);
}
*/