软件下载 | 资讯教程 | 最近更新 | 下载排行 | 一键转帖 | 发布投稿
您的位置:最火下载站 > 设计在线 > 媒体动画 > AS3删除指定xml节点并保存到本地

AS3删除指定xml节点并保存到本地

周末,在制作一个flash应用的小程序时候碰到两个问题,设法解决之后感觉有必要发出来给大家共享一下。

这个小应用的情况如下:
将swf打包成exe文件:可以在用户未安装flashplayer的机器上播放。
可以读取设定好的xml:可以加载用户的自定义数据。
可以保存结果:记录每次运行的结果。

这是一个模拟随机抽奖的小程序:
用户修改程序目录下的data.xml来添加参与抽奖的人员(对应的照片)。
程序运行之后即可加载data.xml中事先定义好的数据。
抽奖结束后保存本次的抽奖结果。

下一次打开之后,可显示上次的中奖记录【上次中奖着将不能参与本次的抽奖活动】。

经过一番整理之后:
1、读取xml之后即可进行随机抽奖
2、抽到某个人员之后记录(该人员)。
3、保存 (本地)。
4、查询(下次运行可查询历史记录、已抽到的人不能参与抽奖)。

由于上午事情比较多。
我直接说处理办法:
声明
xml1:XML //用户数据
xml2:XML //本次操作的用户数据副本
luck:Array //历史中奖记录
lucknow:Arrar //本次操作记录
hostLuck:SharedObject //本地记录

1、flash运行之后首先检查本地记录。
如果:本地记录为空
则:读取data.xml、 luck=new Array() 且 将xml、luck数据写入本地hostLuck。获得xml1、xml2。xml2是xml1的副本xml1.copy()。luck是历史中将记录(暂时为空)
否:xml对象=本地记录。获得xml1、xml2。xml2是xml1的副本xml1.copy()。luck是历史中将记录。

2、开始根据xml1进行图片加载和抽奖操作。
抽到的人员记录到lucknow数组lucknow.push(“as”)。且删除xml2的对应记录。

3、点击保存。
将xml2写入本地。将中奖记录写入本地luck.push(lucknow)【如果记录为空则不做任何操作】。

============分割线连绵到尽头、就像我的寂寞一样=======================

操作分析及解决方法。
1、flash运行时候首先检查是否有本地文件(上次记录),如果有的话则直接赋给声明好的xml用于本次抽奖。同时也可得到上一次中奖记录的二维数组。
如果没有。则读取xml。获得数据用于本次抽奖。读完同时写入读到的数据到本地。同时创建一个空的数据(空白中将记录)写入本地。
2、分别复制xml和创建一个数组,用于记录本次的操作。
开始进行抽奖操作。抽到的某个人。首先从xml的副本中删除对应的记录。同时记录中奖名单进数组。
3、
如果:
1、直接退出,则本次数据无保存。下一次打开之后发现本地文件。就直接加载本地文件了。
2、保存退出,将xml的副本写入本地(替换初始写入的xml数据)。将中奖名单数组也写入本地。注意是push追加。下一次打开发现本地文件。获得是删除过中将记录的xml数据。也可得到一个中奖数组。几次抽奖几次push。可由数组长度知道。因为获得删除过中将记录的本地xml数据,所以上一次中奖的人员不会出现在本次抽奖名单。

上述是实现原理。
其实用到的东西 只有xml 数组array和flash的本地共享对象SharedObject(session ^^)。
xml、array应该大家都熟悉,对SharedObject不熟悉的用一下F1即可。

==================遗漏内容补充==================

删除xml指定的节点,as3帮助中并没有提供现成的方法。
因为as3遵循了xxx标准。所以是把xml当作一个对象来的。
比如xml

Copy to ClipboardLiehuo.Net Codes引用的内容:[www.veryhuo.com]
var xmldel:XML="<date _y="320" _w="178" _h="235">
<!-- pic是照片地址|名字 -->
<person pic="data/pic/xutiebing.jpg">徐铁兵</person>
<person pic="data/pic/dingkebei.jpg">丁克北</person>
<person pic="data/pic/guowei.jpg">郭 巍</person>
<person pic="data/pic/liuyafan.jpg">刘雅凡</person>
<person pic="data/pic/zhangwei.jpg">张 伟</person>
</date>"

如果我要删除其中的丁克北这个记录。只需要如下操作:

Copy to ClipboardLiehuo.Net Codes引用的内容:[www.veryhuo.com]
delete xmldel.person[1];
    相关阅读
    栏目导航
    推荐软件