永川海名微医院:Flash处理外部XML文档数据-Flash教程(二)

来源:百度文库 编辑:中财网 时间:2024/04/29 21:55:51

下面就是怎么在Flash中调用XML文档和处理XML中的数据.

Flash方面:

在Flash中调用xml文档需要用到XML类和XMLNode类中的一些方法和属性.这里我们就不需要用到那么多.把用到的方法和属性列出来:

XML类:

  • XML.ignoreWhite;//处理xml文档中的空白,设为true时,忽略空白,默认值为false.
  • XML.load("xml文档的地址");//加载指定的xml文档.
  • XML.onLoad=function(success:Boolean){};//成功加载了xml文档时调用.
  • XML构造函数.

XMLNode类:

  • XMLNode.attributes;//用来指定xml文档对象节点的属性.
  • XMLNode.childNodes;//返回指定xml文档对象的子级的数组.
  • XMLNode.firstChild;//引用父级节点的子级列表中的第一个子级.
  • XMLNode.nodeValue;//返回XML对象的节点值.
  • XMLNode.nodeName;//XML 对象的节点名称

开始实验:

首先说明:
在xml声明处加上encoding="gb2312".使用gb2312编码.;
Flash中假如有中文需要在加载代码前面加上System.useCodepage = true;
使用系统编码.防止乱码.

实验1:

一个简单的实验.把xml文档中的节点在Flash输出来.
新建一个xml文档.在记事本输入下面的代码.保存为 xml-001.xml ;







上面是一个简单的xml文档.结构是一个顶层节点中嵌套三个子级节点.现在在Flash中如何读出来呢?

来看操作:

打开Flash,新建一个Flash文档,保存到刚才的xml文档中的目录中,命名 xml-001.fla ;
在第一帧输入下面代码:

//xml-001.fla.
//实例化一个xml对象.
var myxml:XML = new XML();
//分析时忽略xml文档中的空格.
myxml.ignoreWhite = true;
//加载xml-001.xml文档.
myxml.load("xml-001.xml");
//调用XML.onLoad事件.
myxml.onLoad = function(success:Boolean)
{
//假如加载成功,success=true;否则success=false;
if (success) {
trace("加载成功!");
//输出顶层节点的节点名和顶层节点中属性name的值.
trace(myxml.firstChild.nodeName ":" myxml.firstChild.attributes.name);
//用一个数组来引用顶层节点中子级节点的数组.
var child_arr:Array = myxml.firstChild.childNodes;
//用嵌套for语句遍历出xml文档中的所有数据.
//这个for遍历的是顶层节点下的子级节点.
for (var i = 0; i//输出顶层节点下的子级节点的节点名和顶层节点下的子级节点中属性name的值.
trace(child_arr[i].nodeName ":" child_arr[i].attributes.name);
}
} else {
trace("加载失败!");
}
};

实验2:

现在做的是把一个多层嵌套节点的xml文档在Flash中输出来.
新建一个xml文档.在记事本中输入下面的代码.然后保存为 xml-002.xml



















上面是一个多层嵌套节点的xml文档.结构是一个顶层节点中,嵌套3个子级节点,3个子级节点分别嵌套3个子级节点.现在又应该怎样在Flash中读出来呢?其实原理跟上面一样.在for中嵌套一个for就可以了.

打开Flash新建一个Flash文档,保存到刚才的xml文档的目录中,命名为 xml-02.fla
在第一帧中输入以下代码:

//xml-002.fla.
//实例化一个xml对象.
var myxml:XML = new XML();
//分析时忽略xml文档中的空格.
myxml.ignoreWhite = true;
//加载xml-002.xml文档.
myxml.load("xml-002.xml");
//调用XML.onLoad事件.
myxml.onLoad = function(success:Boolean)
{
//假如加载成功,success=true;否则success=false;
if (success) {
trace("加载成功!");
//输出顶层节点的节点名和顶层节点中属性name的值.
trace(myxml.firstChild.nodeName ":" myxml.firstChild.attributes.name);
//用一个数组来引用顶层节点中子级节点的数组.
var child_arr:Array = myxml.firstChild.childNodes;
//用嵌套for语句遍历出xml文档中的所有数据.
//这个for遍历的是顶层节点下的子级节点.
for (var i = 0; i//输出顶层节点下的子级节点的节点名和顶层节点下的子级节点中属性name的值.
trace(child_arr[i].nodeName ":" child_arr[i].attributes.name);
//这个for遍历的是顶层节点下的子级节点下的子级节点.
for (var j = 0; j//输出顶层节点下的子级节点下的子级节点的节点名 和 顶层节点下的子级节点下的子级节点中属性name的值.不要晕.看看输出面板就会明白它们之间的关系了哦.
trace(child_arr[i].childNodes[j].nodeName ":" child_arr[i].childNodes[j].attributes.name);
}
}
} else {
trace("加载失败!");
}
};

实验3:

利用xml文档数据做用户登录.
新建一个xml文档.在记事本中输入下面的代码.然后保存为 xml-003.xml












首先分析下结构:

是顶层节点.
是顶层节点下的子级节点.Post是manager节点的属性.
是顶层节点下的子级节点.Post是Employee节点的属性.
是顶层节点下的子级节点下的子级节点.username和password是UserData节点的属性.

这次也需要用到嵌套for.

  • 打开Flash新建一个Flash文档,大小为300*100,保存到刚才的xml文档的目录中,命名为 xml-03.fla
  • 新建3个图层分别命名Actions , cont , bg .
  • bg层在第一帧画三个文本框大小的虚线框.
  • cont层在第一帧拉二个输入文本框,实例名分别为username_txt和password_txt,再拉一个动态文本框,实例名为status_txt.将这三个文本框对齐须虚线框.再点窗口->公用库->按钮.拉一个按钮出来.实例名为login_btn.

如图:

Actions层在第一帧中输入以下代码:

//xml-003.fla.
//使用系统编码.防止乱码.
System.useCodepage = true;
//实例化一个xml对象.
var myxml:XML = new XML();
//分析时忽略xml文档中的空格.
myxml.ignoreWhite = true;
//加载xml-002.xml文档.
myxml.load("xml-003.xml");
//调用XML.onLoad事件.
myxml.onLoad = function(success:Boolean)
{
//假如加载成功,success=true;否则success=false;
if (success) {
trace("加载成功!");
login_btn.onRelease = function()
{
//用一个数组来引用顶层节点中子级节点的数组.
var child_arr:Array = myxml.firstChild.childNodes;
//用UserData指定xml文档节点的attributes对象.
var UserData:Object;
//这个for遍历的是顶层节点下的子级节点.
for (var i = 0; i//这个for遍历的是顶层节点下的子级节点下的子级节点.
for (var j = 0; j//用UserData指定child_arr[i].childNodes[j].attributes对象
UserData = child_arr[i].childNodes[j].attributes;
//判定用户名和密码.
//这里的UserData.username其实就是child_arr[i].childNodes[j].attributes.username的简写.UserData.password同理.
//username和password是xml文档节点中的属性.因为xml和Flash区分大小写.所以在输入时要注重大小写.
if ((username_txt.text == UserData.username) && (password_txt.text == UserData.password)) {
//Post这个是顶层节点下子级节点的Post属性.
status_txt.text = child_arr[i].attributes.Post ":" UserData.username "登录成功";
//假如用户名和密码正确就退出for.这个重要.假如不用这个,就会一直重复判定用户名和密码.直到将xml文档节点遍历完.那样就不是我们想要的.所以一有正确的就退出for;
return;
} else {
status_txt.text = "用户名或密码错误";
}
}
}
};
} else {
trace("加载失败!");
}
};

实例4:

利用List组件做个mp3播放列表.
新建一个xml文档.在记事本中输入下面的代码.然后保存为 xml-004.xml



啊桑-寂寞在唱歌
寂寞是因为思念谁
老狼-睡在我上铺的兄弟
誓言-求佛
下一站天后
伊能静-你是我的幸福吗
爱情复兴(容祖儿)
水木年华-秋日恋歌
张国荣-倩女幽魂
皇缀馨舻挠⑽母?酒吧里常放)

xml结构:
xml文档中的顶层节点.
啊桑-寂寞在唱歌顶层节点下的子级节点.path是mp3节点下的属性."啊桑-寂寞在唱歌"是mp3的节点值.

  • 打开Flash新建一个Flash文档,大小为200*150,保存到刚才的xml文档的目录中,命名为 xml-04.fla
  • 新建2个图层分别命名Actions , cont .
  • cont层中拉一个List组件到第一帧.大小为200*150,实例名为mp3_list.
  • Actions层第一帧输入下面代码:

//xml-004.fla.
//使用系统编码.防止乱码.
System.useCodepage = true;
//实例化一个xml对象.
var myxml:XML = new XML();
//分析时忽略xml文档中的空格.
myxml.ignoreWhite = true;
//加载xml-004.xml文档.
myxml.load("xml-004.xml");
//调用XML.onLoad事件.
myxml.onLoad = function(success:Boolean)
{
//假如加载成功,success=true;否则success=false;
if (success) {
trace("加载成功!");
//用一个数组来引用顶层节点中子级节点的数组.
var child_arr:Array = myxml.firstChild.childNodes;
//这个for遍历的是顶层节点下的子级节点.
for (var i = 0; i//将歌曲添加到List组件中.
//child_arr[i].firstChild.nodeValue这个是xml节点的节点值.
//child_arr[i].attributes.path这个是xml节点下的path属性.
mp3_list.addItem({label:(i 1) "." child_arr[i].firstChild.nodeValue, data:child_arr[i].attributes.path});
}
} else {
trace("加载失败!");
}
};
//listEvent函数是执行List组件中change事件
function listEvent():Void
{
//这个就是歌曲地址.用Sound类的loadSound方法就可以播放歌曲了.例:mysound.loadSound(mp3_list.selectedItem.data);具体请看帮助文档.
trace(mp3_list.selectedItem.data);
}
//添加帧听器.
mp3_list.addEventListener("change", listEvent);