请选择 进入手机版 | 继续访问电脑版
收藏本站腾讯微博新浪微博
点点网模板设计大赛 phpchina

经典论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

蓝色理想 最新研发动态 用悬赏 三天解决问题 解决访问速度慢 论坛支持农历生日 - 给官方提建议

论坛活动及任务 归纳网站最新活动 地图任务 邮件更新任务:保护帐号安全

积分换实物,来参加蓝色理想积分兑换吧! 联系招聘客服 蓝色理想帮你找工作! 万元奖励等你拿——点点网模板设计大赛

查看: 5989|回复: 4

[FLASH IDE] 原创|关于XML在与FLASH交互应用中的理解 [复制链接]

taoshaw 楼主
帖子
216
体力
901
威望
16
居住地
重庆市 涪陵区
发表于 2008-4-10 10:48:46 |显示全部楼层
关于XML在FLASH中的应用,以前写过几篇。也收集了几篇来自网络的。不过,都是一些非常简单而常用的。在这里,我把XML的其他相关说明总结一下。有不足之处,希望大家能相互补充。只为了一个共同的目的:共同提高。

一、书写标准的XML需要注意以下几点:
1、一个标准的XML文档必须要在第一行以"<?xml>"开头,以及一个"<?/>"结尾,其中开头部分需申明XML的版本,如:version="1.0",也应包含一个关于编码的声明:“encoding="utf-8"”;
2、XML要求所有的标签必须在文档结束之前被闭合,如果标签中包含内容,则必须写成“<标签名>内容</标签名>"的格式,如果内容为空,则应写在</标签名>的格式;即,后面必须有</XXX>这种格式的。
3、每个XML都有有一个根元素,也叫根节点。
4、节点有节点值和属性。
5、XML的节点值如果出现与XML标签关键字一样的字符,XML将会无法解析文档,比如,某个节点值如果是一个大于或者小于号,就会让解释器产生一个错误,

二、在FLASH中创建一个简单的实例:
//创建一个新的XML类实例
var my_XML:XML=new XML();
//创建一个TextArea组件,用于显示此XML内容
var my_TextArea:mx.controls.TextArea;
//加载外部XML文件
my_XML.load("my_xml.xml");
//为load函数定义onLoad函数---此处是必须的。只有当加载成功后,才能控制XML。否则不能。
my_XML.onLoad=function(ok:Boolean){
if(ok){
my_TextArea.text+=this;
}else{
my_TextArea.text+="加载失败..."
}
}
//忽略空白:
my_XML.ignoreWhite=true;


三、关于FLASH解析XML详解,说白了,也就是对节点的读取。
首先,来看看这幅图,稍微加点印象。



下面,我将对XML文件的解析方面做详细的介绍。
为了便于讲解,在此,我举一个简单的例子。
1、新建一个记事本文件,在里面输入如下内容:
<购买物品>
<衬衣 颜色="白色" 品牌="雅戈尔">1件</衬衣>
<裤子 颜色="深蓝" 品牌="王子裤">1条</裤子>
<鞋子 颜色="黑色" 品牌="红蜻蜓">3双</鞋子>
<总花费金额>
<打的费>50元</打的费>
<货物金>1000元</货物金>
</总花费金额>
</购买物品>


然后保存为"goods.xml",注意,在编码处,要选择"Unicode"。

2、下面,就对里面的各项值进行解读。
读取整个XML文件的方法:
在刚才的XML的同级目录下新建一FLA文件,然后在场景中放置一TextArea组件。并赋实例名“my_TextArea”,
然后在第一帧中添加如下代码:

var my_XML:XML=new XML();
System.useCodepage=true;
var my_TextArea:mx.controls.TextArea;
my_XML.load("goods.xml")
my_XML.onLoad=function(ok:Boolean){
if(ok){
my_TextArea.text+=this;
}else{
my_TextArea.text+="加载失败"
}
}

按CTRL+ENTER测试,即可以看效果。

首先,我们来看看如何对XML中的节点名称或者节点属性进行读取呢?
比如,我们要读取如例子中的"购买物品"这几个字符,该如何操作呢?
我们使用如下语句:
this.firstChild.nodeName;
如果要读取"衬衣":
this.firstChild.childNodes[0].nodeName;
如果要读取"1条":
this.firstChild.childNodes[1].childNodes[0].nodeValue;
如果要读取裤子的品牌:
this.firstChild.childNodes[1].attributes.品牌;

将XML读取进LIST组件中:

System.useCodepage = true;
var my_TextArea:mx.controls.TextArea;
var my_List:mx.controls.List;
var my_XML:XML = new XML();
my_XML.ignoreWhite = true;
my_XML.load("shopping.xml");
my_XML.onLoad = function(ok:Boolean) {
  if (ok) {
    var childnodes = this.firstChild.childNodes;
    for (i=0; i<childnodes.length; i++) {
      my_List.addItem({label:childnodes.nodeName});
    }
  } else {
    my_TextArea.text += "加载失败";
  }
};

第一个节点:firstChild:
用法:this.firstChild;
最后一个节点:lastChild
用法:this.lastChild;
兄弟节点:nextSibling:
用法:this.firstChild.childNodes[0].nextSibling;
另一个兄弟节点:previousSibling:
用法:this.firstChild.childNodes[0].previousSibling;
区别:nextSibling是朝后,而previousSibling是当前之前;
父类节点:parentNode:
用法:this.firstChild.parentNode;

上述所有实例演示:
http://www.taoshaw.com/taoshaw/study/LoadXml/LoadXML.swf


源文件下载:

[ 本帖最后由 taoshaw 于 2008-4-12 07:07 编辑 ]
附件: 你需要登录才可以下载或查看附件。没有帐号?注册
已有 1 人评分威望 收起 理由
lzyy + 1 谢谢分享

总评分: 威望 + 1   查看全部评分

西部数码顶级域名注册商39元抢注!

头发甩甩

高级会员

帖子
419
体力
1404
威望
0
居住地
河北省 石家庄市
发表于 2008-4-11 09:31:03 |显示全部楼层
楼主文中我看到有三处错误:
1.(如果要读取"1条")应改为"1件"
2.lastChild的用法:this.firstChild;应改为this.lastChild;
3.楼主的源文件里,读取xml的文件路径不对.

以上三处,不知道是我错了,还是楼主一时马虎写错了.我也正在学读取xml.
如果真要是错的话,对我这种新人可算是一种错误的引导吧.

[ 本帖最后由 natty84 于 2008-4-11 09:51 编辑 ]
投入便快乐。
租服务器,上51IDC | [长沙]招聘:PHP经理10K/WEB前端6K/PHP开发6K

使用道具 举报

帖子
23
体力
103
威望
0
居住地
广东省 深圳市
发表于 2008-4-11 14:45:24 |显示全部楼层

支持

楼主讲的很清楚,明白,对新手很大的帮助,收益不浅
向楼主学习

使用道具 举报

taoshaw 楼主
帖子
216
体力
901
威望
16
居住地
重庆市 涪陵区
发表于 2008-4-12 07:04:58 |显示全部楼层
原帖由 natty84 于 2008-4-11 09:31 发表
楼主文中我看到有三处错误:
1.(如果要读取"1条")应改为"1件"
2.lastChild的用法:this.firstChild;应改为this.lastChild;
3.楼主的源文件里,读取xml的文件路径不对.

以上三处,不知道是我错了,还是楼主一时马虎写 ...


噢,首先非常感谢这位兄弟的提醒.在写教程过程中,有些仓促,一时马虎,以后我会更加小心的,呵呵.不好意思了.

前面两点都算是低级失误,呵呵.已经修改过来了,其中的裤子应该是1条,最后一个节点应该是this.lastChild.

第三点,由于我要读取正确路径,这上面的FLASH才能显示,所以,设置了固有模式.呵呵.

以后大家多交流,呵呵.

[ 本帖最后由 taoshaw 于 2008-4-12 07:08 编辑 ]

使用道具 举报

头发甩甩

高级会员

帖子
419
体力
1404
威望
0
居住地
河北省 石家庄市
发表于 2008-4-12 08:34:15 |显示全部楼层
嗯,还好我还没有菜到连路径也不会看.呵呵,我也是为了下载后可以直接学习的朋友说一声.

如果我要是下载以后,打开,出现加载失败的话,我可能会觉得this教程也好不到哪去, 给人第一感觉不好.

不管怎样,还是感觉楼主分享,写得很详细,对我也是一种提高.
投入便快乐。

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

Archiver|手机版|安久科技提供CDN|blueidea.com ( 京ICP备05002321号 )  

GMT+8, 2012-2-9 13:31 , Processed in 0.070525 second(s), 11 queries , Gzip On, Memcache On.

Powered by Discuz! X2

© 2001-2011 Comsenz Inc.

回顶部