Macromedia在Flash 5.0 和MX中提供了诸多新特点,它正朝着程序开发竞争舞台发展。这些特性中的其中一个就是在Flash中综合了xml。即使你不是一个Flash设计者,你也可以将xml知识运用到Flash的测试中去。
不需要花费多大工夫,你就可以掌握足够的Flash知识来创建一个完整的解决方案。Flash是基于动画的原理,因为事件通常是按照时间顺序发生的,被分解为不同的框架。但是,通过使用ActionScript,不需要许多框架构成整个动画,你就可以处理这些事件并操纵一部动画。在我举的实例中,我只用一个框架创建了一个电话目录地址。
ActionScript则是基于ECMA-262标准,因此它和JavaScript非常像。如果你熟悉JavaScript,那适应ActionScript应该不会有问题。
我创建的电话地址目录非常简单。你键入你想找的人的Last name或Last name的一部分。然后这个“Last name”的数据被传送到一个ASP页面,这个页面在请求中使用查询字符串数据,对一个Microsoft Access数据库进行搜索,寻找匹配字符。返回记录集,转变为xml,以xml形式返回到Flash动画。接着Flash动画解析xml并显示结果集合。
Flash动画只包含了一个文本输入框来输入“Last name”和启动搜索的按钮。其结果从一个动画片段符号示例说明为单个动画片段。(不用参考完整的Flash指南,你可以在这篇文章的结尾找到链接到源代码的地址。)
Flash提供了一个xml对象类来创建xml方案。xml对象中的load()方式让你可以从远程主机上下载数据。当数据下载完成时,xml对象的“onLoad”事件出现。
你可以通过将这个“onLoad”事件设置为一个有效的函数名,来为xml对象提供一个事件处理程序。Flash的 xml对象并没有提供许多功能给检索过的xml。但是,你可以用一些灵活的设计来创建一些巧妙的解决方案。
下面就是为xml对象设计的“onLoad”事件处理程序:
function myxml_onLoad() {
for (var p = 0; p < pcount;
p++) {
removeMovieClip(_level0["phone"
+ p]);
}
for (var i = 0; i < myxml.childNodes.length;
i++) {
var
node = myxml.childNodes[i];
attachMovie("phone",
"phone" + i, i);
var
newMovie = _level0["phone" + i];
newMovie._x
= lblHeading._x;
newMovie._y
= (lblHeading._y + lblHeading._height) + (i * (lblHeading._height
+ 2));
for
(var n = 0; n < node.childNodes.length; n++)
{
var
child = node.childNodes[n];
newMovie[child.nodeName]
= child.childNodes[0].nodeValue;
}
}
pcount = i;
}
第一个for()循环从以前的结果集合中删除现有的动画片段。下一个for()循环重复xml对象(myxml)中的每个子节点(childNode)。一个新的电话动画片段符号实例被添加并放置在每个循环过程中。电话动画片段符号包含了几个和xml文件所有childNode的nodeNames相匹配的组件变量。这些用来设置所有动画片段符号的文本。值得注意的一件事就是child.childNodes[0].nodeValue属性的调用。当一个正常节点随着开始和结束标志之间的文本一起返回时,那个文本就是一个文本节点。你必须参考元素中的子节点来获取元素的内容。下面就是一个被返回的xml实例:
<row>
<first_name>John</first_name>
<last_name>Public</last_name>
<phone>800-555-1212</phone>
</row>