为Flash MX创建XML解决方案

ZDNet软件频道 时间:2004-04-20 作者:Builder.com |  我要评论()
本文关键词:xml
在Flash中综合了XML。即使你不是一个Flash设计者,你也可以将XML知识运用到Flash的测试中去。
本文译自Builder.com,未经许可请勿转载

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>

 


百度大联盟认证黄金会员Copyright© 1997- CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号 京ICP备09041801号-159
京公网安备:1101082134