·您当前的位置:首页 > 技术教程 > AS2与AS3技术 >

[图]as2加载xml的示例详解(2)

时间:2011-09-01 15:03CuPlayer.com
分析: System.useCodepage = true; 如果在XML文档中使用了中文编码,例如gb2312.那么在FLASH中必须启用使用页面编码的指令. var doc:XML = new XML(); 建立一个XML实例.赋予doc这个对象. doc.load(city.xml); load()

  分析:

  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")
}
 

热门文章推荐

请稍候...

保利威视云平台-轻松实现点播直播视频应用

酷播云数据统计分析跨平台播放器