Flash基础入门:XML与FLASH通讯
小标 2018-07-12 来源 : 阅读 10 评论 0

摘要:本文主要向大家介绍了Flash基础入门的XML与FLASH通讯,通过具体的内容向大家展现,希望对大家学习Flash基础入门有所帮助。

本文主要向大家介绍了Flash基础入门的XML与FLASH通讯,通过具体的内容向大家展现,希望对大家学习Flash基础入门有所帮助。

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()代码,其余的基本一致,而且,模块化的设计,也是能使代码复用的重要之处.

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标常用软件Flash频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论
X
免费获取海同IT培训资料
验证码手机号,获得海同独家IT培训资料
获取验证码
提交

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
沪公网安备 31011502005948号