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