FLASH与XML的数据交互

news/2024/7/7 13:22:58

在FLASH中,使用XML接口获取外部数据是最有效的方法之一.(通常还有WebSerivce接口和LoadVars方法)

下面来看一个简单的XML文档(city.xml)

这个文档描述的是城市地区的信息

xml version="1.0" encoding="gb2312"?>

<root>

<city name="上海" code="021" pnum="500000"/>

<city name="北京" code="010" pnum="600000"/>

<city name="浙江" code="057" pnum="1000000"/>

root>

简单介绍一下XML文档格式的书写规范:

第一行:

这是一个XML文档的描述信息.其中定义了该XML文档的一些基本属性,包括:版本信息(version),使用的字符编码(encoding).

第二行:

(虽然在FLASH中我们用不到节点的任何属性,但是合式的XML文档必须要求一个根节点)

在XML文档中,这是一个根节点.XML规定所有标签必须有闭合.所以,在最后一行使用对应的标签来闭合.同样,单行的XML节点也需要闭合,例如:其中"/"符号就表示单行的节点闭合."name","code","pnum"是节点的属性,写法就是:属性名="属性值" 这样的名/值对.至于节点名和属性名都是可以自定义的,也就是说可以任意命名.但是还是建议要尽量规范

""节点是""的子节点,相应的""叫做""的父节点

在这个XML文档中有3个子节点,我们数据就存储在这3个子节点的属性中,分别有:城市名称(name),城市代码(code),城市人口数目(pnum)

我们要做的最终目的就是在FLASH中获取这些节点的属性值

下面来看一个FLASH调用XML的实例

System.useCodepage = true;

var doc:XML = new XML();

doc.load("city.xml");

doc.ignoreWhite = true;

doc.onLoad = function(success){

 if(success){

  trace(doc.childNodes[0].childNodes[0].attributes.name);

  trace(doc.childNodes[0].childNodes[1].attributes.name);

  trace(doc.childNodes[0].childNodes[2].attributes.name);

 }

}

分析:

System.useCodepage = true;

如果在XML文档中使用了中文编码,例如"gb2312".那么在FLASH中必须启用使用页面编码的指令.

var doc:XML = new XML();

建立一个XML实例.赋予"doc"这个对象.

doc.load("city.xml");

"load()"-XML对象的一个方法:加载XML数据到"doc"这个对象当中.

提供XML数据的方式并不是限制于.xml的文件,任何符合XML书写格式的文档都可以,通常,我们是使用程序来提供XML数据的,例如"http://www.51ww.com/city.aspx?country=china"

doc.ignoreWhite = true;

"ignoreWhite"-XML对象的一个属性:指定XML文档忽略空白,因为在XML中一个换行在FLASH中会被视为一个节点

doc.onLoad = function(success){}

"onLoad"-XML对象的一个方法.将会返回一个布尔值"true或false".用来判断XML是否被成功加载.如果加载成功则会返回"true",反之则返回"false"

此处为该方法使用了一个函数,其参数"success"用来贮存上述的布尔值

if(success){}

一个判断语句:如果加载成功(即success的值为"true"),则触发括号内的动作

trace(doc.childNodes[0].childNodes[0].attributes.name);

输出doc(此时"city.xml"中的数据已经包含到doc这个XML对象当中)这个XML对象的第一个节点下的第一个子节点的"name"属性值

childNodes-XML对象的一个属性,它的值的类型是数组型.XML的一个节点可以在FLASH中通过这个属性来表示其包含的数据.

由于FLASH中数组的长度计算是由"0"开始,所以我们XML文档中的第一个节点就存储在数组的"0"位置.而不是"1"

所以,我们取出XML文档的第一个节点-"",就应该表示成这样"childNodes[0]"

同样,我们取出XML对象根节点("")下的第一个子节点(""),就表示成doc.childNodes[0].childNodes[0]

相应的,取出第二个子节点:doc.childNodes[0].childNodes[1]

第三个子节点:doc.childNodes[0].childNodes[2]

(这一步中,需要涉及到FLASH中数组对象的使用原理)

在FLASH与XML的数据交互中,可能数据的表现是最难的一步.

针对上面数据表现方式,我们可以充分利用数组的便利性来做

假如已经获得一个XML对象"doc"

首先,我们将这个XML中使用到的数据转换为一个数组对象来表示

var myList:Array = doc.childNodes[0].childNodes;//直接将XML文档根节点下的的所有子节点放到一个数组中

trace(myList[0].attributes.name+","+myList[0].attributes.code+","+myList[0].attributes.pnum);//输出第一个"city"节点所有的属性值

trace(myList[1].attributes.name+","+myList[1].attributes.code+","+myList[1].attributes.pnum);//输出第二个"city"节点所有的属性值

trace(myList[2].attributes.name+","+myList[2].attributes.code+","+myList[2].attributes.pnum);//输出第三个"city"节点所有的属性值

输出结果:

上海,021,500000

北京,010,600000

浙江,057,1000000

/*以上完整的代码为*/

System.useCodepage = true;

var doc:XML = new XML();

doc.load("city.xml");

doc.ignoreWhite = true;

doc.onLoad = function(success){

 if(success){

  var myList:Array = doc.childNodes[0].childNodes;

  trace(myList[0].attributes.name+","+myList[0].attributes.code+","+myList[0].attributes.pnum);

  trace(myList[1].attributes.name+","+myList[1].attributes.code+","+myList[1].attributes.pnum);

  trace(myList[2].attributes.name+","+myList[2].attributes.code+","+myList[2].attributes.pnum);

 }

}

/*代码结束*/

为了在FLASH中其他的位置都能够访问到我们所需要的XML数据,我们可以将myList数组对象放置到上下文的任意位置

例如:

System.useCodepage = true;

var doc:XML = new XML();

var myList:Array = new Array();//预先建立一个数组对象用来放置XML节点数据,以便FLASH其他位置的代码都能够访问

doc.load("city.xml");

doc.ignoreWhite = true;

doc.onLoad = function(success){

 if(success){

  myList = doc.childNodes[0].childNodes;//当XML加载成功后对上文的myList数组对象进行赋值.

 }

}

//使用一个按钮动作来获取数组对象中的一个CITY节点信息

btName.onPress = function(){

trace(_root.myList[0].attributes.name+","+_root.myList[0].attributes.code+","+_root.myList[0].attributes.pnum);

}

这样的写法当然还不满足我们一些复杂的需求,而且代码过冗长.

使用函数来返回我们需要的信息,应该是最正确的做法,我们来实现它

按下按钮时,向函数递交一个城市代码,返回城市名和人口信息

System.useCodepage = true;

var doc:XML = new XML();

var myList:Array = new Array();//预先建立一个数组对象用来放置XML节点数据,以便FLASH其他位置的代码都能够访问

doc.load("city.xml");

doc.ignoreWhite = true;

doc.onLoad = function(success){

 if(success){

  myList = doc.childNodes[0].childNodes;//当XML加载成功后对上文的myList数组对象进行赋值.

 }

}

//函数开始

function getCityInfo(code){  //构建一个函数的写法是:function 函数名(参数){//脚本代码}

 var cityName:String;//建立一个字符窜变量来存储城市名

 var pepCount:String;//建立一个字符窜变量来存储居民数量

 for(var i=0;i<myList.length;i++){

  if(code eq myList[i].attributes.code){

   cityName = myList[i].attributes.name;

   pepCount = myList[i].attributes.pnum;

  }

 }

 return "城市:"+cityName+",人口:"+pepCount //返回一段文字表达信息

}

//函数结束

    /*按钮的动作*/

btName.onPress = function(){

trace(getCityInfo("010"));//输出函数的返回结果,(在函数的参数中提交城市代码-"010")

}


http://www.niftyadmin.cn/n/530357.html

相关文章

python mysql数据库编程_python使用mysql数据库

import pymysqlconn pymysql.connect( #Connect() 方法用于创建数据库的连接&#xff0c;里面可以指定参数&#xff1a;用户名&#xff0c;密码&#xff0c;主机等信息host localhost, #这只是连接到了数据库&#xff0c;要想操作数据库需要创建游标port 3306,user root,pa…

三目运算符判断三个值_Day10:Java语言基础-运算符之赋值运算符

大家好&#xff0c;我在这里讲解一下为什么我在课程中大量使用图片来展示我的演示程。是因为虽然编辑文章的时候&#xff0c;有代码块功能可以实现代码的结构展示。但是在手机端的样式兼容做的不够好&#xff0c;我在手机端看了自己的内容&#xff0c;觉得很难看&#xff0c;所…

让Flash更好的利用Xml

英文原文地址&#xff1a; http://www.darronschall.com/weblog/archives/000065.cfm 在网上许多XML的解释数据都涉及到在FLASH不断地从一个XML文档中读取节点树来释放数据。这种做法有两个不足的地方&#xff1a;速度和可读性。下面我将教大家一种不是新的&#xff0c;但是&am…

数组(随机生成一维数组),二维数组的概念和题目设计(利用二维数组 :任意给定分数去计算科目和人均平均分)...

1 //数组间的关系arr[]中的数字为几&#xff0c;[]内就有几个数2 //{ }内的数是从0开始&#xff0c;如需要打印应从0开数3 如{2,6,9,8,7}打印arr[4]就是74 #include <stdio.h>5 #include <stdlib.h>6 int main()7 {8 int arr[] { 1,2,3,4,8};9 10 …

mysql5.6备份脚本_实战:INNOBACKUPEX for mysql 5.6自己主动备份脚本

#backup.sh#!/bin/sh## 第一次运行它的时候它会检查是否有全然备份,否则先创建一个全库备份# 当你再次执行它的时候。它会依据脚本中的设定来基于之前的全库备份进行增量备份#ocpyang126.comINNOBACKUPEX_PATHinnobackupex #INNOBACKUPEX的命令INNOBACKUPEXFULL/usr/bin/$INNO…

flash读取xml简明实例教程

----------------------------flash读取xml简明实例教程 --------------------------****************************************************************一、建立XML对象&#xff1a; var myXML new XML();二、引用XML文件&#xff1a; myXML.load("data.xml");三、…

单例模式双重校验_面试官:你知道双重加锁单例模式为什么加volatile关键字吗?...

单例模式的实现上面代码是一个经典的单例的双重监测的代码&#xff0c;这段代码在单线程环境下并没有什么问题&#xff0c;但如果在是多线程环境下就可能出现线程安全问题。多线程不安全的原因上面代码不安全的原因如下&#xff1a;当某一个线程执行到第一次监测&#xff0c;读…

好用的XML/SWF Charts图表組件

俗话说&#xff1a;“一画抵千言”。这句话很难反驳&#xff0c;尤其是在谈论图形的时候。然而一直以来&#xff0c;在 Web 上画图并非易事。虽然有些 Web 框架包括了一些用于构建图像的基本图形&#xff0c;但大多数 Web 框架都缺少即开即用的画图工具。这种功能的缺失使您必须…