【ActionScript 3学习笔记】XML数据的访问与操作

XML数据的访问:

  • 使用“ . ”点号运算符访问各个层级的子元素;
  • 使用“ @ ”来访问各个元素的属性;
  • 同名的子元素成为一个XMLList对象,是XML对象的一个集合,可以使用数组运算符 [ ] 访问。
代码举例:
var xml:XML = 
	<websites>
		<site name="百度">
			<url>http://www.baidu.com/</url>
		</site>
		<site name="谷歌">
			<url>http://www.google.com.hk/</url>
		</site>
	</websites>
			
trace(xml.site.url[0]);				//输出结果:http://www.baidu.com/
trace(xml.site[0].@name);			//输出结果:百度,作用等同于trace(xml.site.@name[0]);
trace(xml.site is XMLList);			//输出结果:true,因为xml有两个同名为site的子元素,因此xml.site为一个XMLList对象
实际上,在第三个trace()语句中,xml即便只有一个site节点,以xml.site这种访问方式进行访问,AVM2所生成的仍然是XMLList对象而非XML对象。

XML元素及属性的添加与删除:

  • 使用点号运算符“ . ”增加节点
xml.site[0].location = "中国";
trace(xml.site[0]);

/*
 * 输出结果:
 *	<site name="百度">
 *		<url>http://www.baidu.com/</url>
 *		<location>中国</location>
 *	</site>
*/
  • 使用“ @ ”增加节点的属性
xml.site[0].@CEO = "李彦宏";
trace(xml.site[0]);

/*
* 输出结果:
*	<site name="百度" CEO="李彦宏">
*		<url>http://www.baidu.com/</url>
*		<location>中国</location>
*	</site>
*/
  • 使用点号运算符“ . ”删除节点
delete xml.site[0].location;
trace(xml.site[0]);
			
/*
* 输出结果:
*	<site name="百度" CEO="李彦宏">
*		<url>http://www.baidu.com/</url>
*	</site>
*/
  • 使用“ @ ”删除节点的属性
delete xml.site[0].@CEO;
trace(xml.site[0]);

/*
* 输出结果:
*	<site name="百度">
*		<url>http://www.baidu.com/</url>
*	</site>
*/


使用双点号“ .. ”访问当前元素的所有子元素

var xml:XML = 
	<websites>
		<site name="百度">
			<url>http://www.baidu.com/</url>
		</site>
		<site name="谷歌">
			<url>http://www.google.com.hk/</url>
		</site>

		<!-- 额外添加三个url节点 -->
		<url>http://www.oschina.net/</url>
		<url>http://www.9ria.com/</url>
		<url>http://www.csdn.net/</url>
	</websites>

//使用“..”访问所有名为“url”的子节点,包括不同层级
trace(xml..url);
trace(xml..url is XMLList);

//输出结果:
/*
<url>http://www.baidu.com/</url>
<url>http://www.google.com.hk/</url>
<url>http://www.oschina.net/</url>
<url>http://www.9ria.com/</url>
<url>http://www.csdn.net/</url>
true
*/
由上面的输出结果可以看出,xml..url返回的是一个包含了xml中所有url节点的XMLList对象。

通配符 * 访问XMLList对象中的所有属性

var xml:XML = 
	<websites>
		<site name="百度" direction="内事问百度">
			<url>http://www.baidu.com/</url>
		</site>
		<site name="谷歌" direction="外事问谷歌">
			<url>http://www.google.com.hk/</url>
		</site>
		<site name="天涯" direction="房事问天涯">
			<url>http://www.tianya.cn/</url>
		</site>
	</websites>

//使用通配符 * 访问xml所有site子节点的所有属性,并生成一个XMLList对象
trace(xml.site.@* is XMLList);
trace(xml.site.@*.toXMLString());

//输出结果:
/*
true
百度
内事问百度
谷歌
外事问谷歌
天涯
房事问天涯
*/


使用表达式制定查找子元素的条件

var xml:XML = 
	<websites>
		<site id="100" name="百度" direction="内事问百度">
			<url>http://www.baidu.com/</url>
			<number>100</number>
		</site>
		<site id="200" name="谷歌" direction="外事问谷歌">
			<url>http://www.google.com.hk/</url>
			<number>200</number>
		</site>
		<site id="300" name="天涯" direction="房事问天涯">
			<url>http://www.tianya.cn/</url>
			<number>300</number>
		</site>
	</websites>

//在xml.site这个XMLList中找出所有符合表达式条件的节点
trace(xml.site.(number>100));
			
//输出结果:
/*
<site id="200" name="谷歌" direction="外事问谷歌">
	<url>http://www.google.com.hk/</url>
	<number>200</number>
</site>
<site id="300" name="天涯" direction="房事问天涯">
	<url>http://www.tianya.cn/</url>
	<number>300</number>
</site>
*/
			
//在xml.site这个XMLList中找出属性id值为100的节点
trace(xml.site.(@id == 100));

//输出结果:
/*
<site id="100" name="百度" direction="内事问百度">
	<url>http://www.baidu.com/</url>
	<number>100</number>
</site>
*/

使用自定义函数搜索XML子元素和属性

上例的trace语句中:trace(xml.site.( 表达式 )),仔细观察可发现表达式实际上返回的是一个Boolean值,因此表达式可被自定义函数所取代,而函数的参数即要参与比对的子元素或属性。依然以上例代码为例,我们尝试以自定义函数的方式进行相同操作:
var xml:XML = 
	<websites>
		<site id="100" name="百度" direction="内事问百度">
			<url>http://www.baidu.com/</url>
			<number>100</number>
		</site>
		<site id="200" name="谷歌" direction="外事问谷歌">
			<url>http://www.google.com.hk/</url>
			<number>200</number>
		</site>
		<site id="300" name="天涯" direction="房事问天涯">
			<url>http://www.tianya.cn/</url>
			<number>300</number>
		</site>
	</websites>

checkNumber.times = 0;		//记录checkNumber方法被调用的次数
checkID.times = 0;			//记录checkID方法被调用的次数
			
trace(xml.site.(checkNumber(number)));
trace("\n=========================================================================\n");
trace(xml.site.(checkID(@id)));
			
//用来检测number子节点的方法
function checkNumber(obj:*):Boolean{
	checkNumber.times ++;
	trace("checkNumber。times = " + checkNumber.times);
	return obj>100 ?  true : false; 
}
			
//用来检测id属性的方法
function checkID(obj:*):Boolean
{
	checkID.times ++;
	trace("checkID.times = "+checkID.times);
	return (obj == 100);
}
		
//输出结果:
/*
checkNumber。times = 1
checkNumber。times = 2
checkNumber。times = 3
<site id="200" name="谷歌" direction="外事问谷歌">
	<url>http://www.google.com.hk/</url>
	<number>200</number>
</site>
<site id="300" name="天涯" direction="房事问天涯">
	<url>http://www.tianya.cn/</url>
	<number>300</number>
</site>

=========================================================================

checkID.times = 1
checkID.times = 2
checkID.times = 3
<site id="100" name="百度" direction="内事问百度">
	<url>http://www.baidu.com/</url>
	<number>100</number>
</site>
*/
由上面的输出结果可以看到,使用自定义函数所获得的结果与上例中完全相同。而两个自定义函数分别被调用了3次,是因为xml.site.length()值为3。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
智慧校园整体解决方案是响应国家教育信息化政策,结合教育改革和技术创新的产物。该方案以物联网、大数据、人工智能和移动互联技术为基础,旨在打造一个安全、高效、互动且环保的教育环境。方案强调从数字化校园向智慧校园的转变,通过自动数据采集、智能分析和按需服务,实现校园业务的智能化管理。 方案的总体设计原则包括应用至上、分层设计和互联互通,确保系统能够满足不同用户角色的需求,并实现数据和资源的整合与共享。框架设计涵盖了校园安全、管理、教学、环境等多个方面,构建了一个全面的校园应用生态系统。这包括智慧安全系统、校园身份识别、智能排课及选课系统、智慧学习系统、精品录播教室方案等,以支持个性化学习和教学评估。 建设内容突出了智慧安全和智慧管理的重要性。智慧安全管理通过分布式录播系统和紧急预案一键启动功能,增强校园安全预警和事件响应能力。智慧管理系统则利用物联网技术,实现人员和设备的智能管理,提高校园运营效率。 智慧教学部分,方案提供了智慧学习系统和精品录播教室方案,支持专业级学习硬件和智能化网络管理,促进个性化学习和教学资源的高效利用。同时,教学质量评估中心和资源应用平台的建设,旨在提升教学评估的科学性和教育资源的共享性。 智慧环境建设则侧重于基于物联网的设备管理,通过智慧教室管理系统实现教室环境的智能控制和能效管理,打造绿色、节能的校园环境。电子班牌和校园信息发布系统的建设,将作为智慧校园的核心和入口,提供教务、一卡通、图书馆等系统的集成信息。 总体而言,智慧校园整体解决方案通过集成先进技术,不仅提升了校园的信息化水平,而且优化了教学和管理流程,为学生、教师和家长提供了更加便捷、个性化的教育体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值