FLASH开发中,有许多方法可以解决数据交互的问题,可以直接使用HTML读取数据,也可以使用ASP,PHP,JSP,JS等等的脚本语言来传输数据,但是有更好的方法,XML,好用,简单,还可以直接在数据库中导出.下面与FLASH AS2.0来说明一下.第一种写法是一个结点保存整个信息,XML文档内容如下:
<?xml version="1.0" encoding="gb2312"?>
<news>
<info newstitle="新闻标题" newsnum="新闻编号"/>
</news>

而在FLASH中如下写法:
stop();
System.useCodepage = true;
LoadXML();
var num = 0;
var num1=num+1;
var total = 0;
var startsign = 0;
function Create(xmlfiles) {
//函数名
var nodes = xmlfiles.firstChild.childNodes;
//获得节点的全部子节点的数目,如果按C语言的说法,nodes其实是一个数组
total = nodes.length;
for (var i = 0, k = num; i<15; i++, k++) {
  //开始进行循环 .length意思是nodes的所有节点总数
  this["news"+i].newstitle.text = nodes[k].attributes.newstitle;
  this["news"+i].newsnum = nodes[k].attributes.newsnum;
}
LoadContent(num1);
}
function InitNews() {
for (var i = 0; i<15; i++) {
  this["news"+i].removeMovieClip();
}
if (num+15>total && startsign) {
  var c = total-num;
  for (var i = 0; i<c; i++) {
   this.attachMovie("news", "news"+i, i);
   this["news"+i]._x = 10;
   this["news"+i]._y = -4.5+i*20.3+23;
  }
} else {
  for (var i = 0; i<15; i++) {
   this.attachMovie("news", "news"+i, i);
   this["news"+i]._x = 10;
   this["news"+i]._y = -4.5+i*20.3+23;
   //trace(this["news"+i]._y);
  }
}
}

function LoadXML() {
var xmlfiles = new XML();
//新建一个XML对象
xmlfiles.ignoreWhite = true;
//除去空格
xmlfiles.onLoad = function(success) {
  //在加载的时候
  if (success) {
   //如果成功
   InitNews();
   Create(this);
   //调用Create函数
  } else {
   trace("error");
   //调用不到就显示出错
  }
};
xmlfiles.load("news.xml");
//把外部XML文件导入,注意文件要用相对路径或者绝对路径
}
function LoadContent(id) {
/*ss:TextField.StyleSheet = new TextField.StyleSheet();
ss.load("news.css");
newscontent.styleSheet = ss;
trace(t);*/
newscontent.wordWrap = true;
newscontent.html = true;
contents = new LoadVars();
contents.onData = function(src) {
  if(src){
  newscontent.htmlText = src;}
  else{newscontent.text="下载失败";}
};
contents.load("getdetail.asp?p_id="+id+"&"+(Math.random()*1000000000));
}


这种写法是以前一直都用的,并且现在有了一点改进,利用到了XML,也用到了ASP文件,共同处理数据,虽然处理起来比较方便,但是效率不高,而且容易产生乱码,不算很好用.现在使用的这种写法,层次感很好,非常清楚,每个结点代表的意思,都非常清楚,这是我最近才这样写的.  
  
XML文档如下所写:
<?xml version="1.0" encoding="gb2312"?>
<newslist>
<info>
<newstitle>
<![CDATA[<font color='#ff9900'>新闻标题</font>]]>
</newstitle>
<newstime>
<![CDATA[<font color='#ff9900'>新闻发布时间</font>]]>
</newstime>
<newscontent>
<![CDATA[<font color='#ff9900'>新闻内容</font>新闻内容<br>新闻内容<img src='bjx1.gif'></img>新闻内容]]>
</newscontent>
</info>
</newslist>


结点的名字都很清楚的表示了结点所存储的数据.值得说一下的是<![CDATA[]]用了这个,里面就可以用HTML的标记了

在FLASH中这样写:
stop();
System.useCodepage = true;
LoadXML();
var num=0;
var total=0;
var startsign=0;
function Create(xmlfiles) {  //函数名
//先找info结点
var inf.firstChild.childNodes;
//trace(infonodechilds.length);
//total=infonodes.length;
//作循环
var i=0;
     k=num;
var inf[k];
newscontent.htmlText=infonode.childNodes[2].childNodes[0].nodeValue;
while(infonode!=null&&i<15)
{
  var inf.childNodes;
        this["news"+i].newstitle.htmlText=infonodechilds[0].childNodes[0].nodeValue;
  this["news"+i].c[2].childNodes[0].nodeValue;
  i++;
  k++;
  inf.nextSibling;
}

}
function InitNews()
{
for(var i=0;i<15;i++)
{
  this["news"+i].removeMovieClip();
}
if(num+15>total&&startsign)
{
  var c=total-num;
  for(var i=0;i<c;i++)
  {
  this.attachMovie("news","news"+i,i);
  this["news"+i]._x=10;
  this["news"+i]._y=-4.5+i*20.3+23;
  }
}
else
{  if(total<15){sub=total;}
    else{sub=15;}
    for(var j=0;j<sub;j++)
    {
  this.attachMovie("news","news"+j,j);
  this["news"+j]._x=10;
  this["news"+j]._y=-4.5+j*20.3+23;
    }
}

}
function LoadXML(){
var xmlfiles = new XML(); //新建一个XML对象
xmlfiles.ignoreWhite = true; //除去空格
xmlfiles.onLoad = function(success) { //在加载的时候
if (success) { //如果成功
     total=this.firstChild.childNodes.length;
  InitNews();
  Create(this); //调用Create函数
} else {
  trace("error"); //调用不到就显示出错
}
};
xmlfiles.load("news.xml"); //把外部XML文件导入,注意文件要用相对路径或者绝对路径
}

这两种使用XML的数据交互,经过实践测试,第二种速度明显比第一种快,更新也容易,也不容易出现乱码.
关键点就是写在FLASH中的两个while()代码,其余的基本一致,而且,模块化的设计,也是能使代码复用的重要之处.