XML和XMLSocket(一) -- XML的基础知识
在这一篇里,我将为大家详细讲解Flash和服务器保持长连接的一种重要用法,也就是下面要说的XMLSocket类。这个方法广泛应用于实时的应用程序,例如在线聊天室或现在最火热的Flash网页游戏。使用XMLSocket,可以实现服务器端对客户端的数据推送!
在讲解XMLSocket之前,我先为大家讲解下,在AS3.0中,处理XML的方法。在AS3.0中,处理XML的方式和AS2.0完全不同了。不仅仅是代码的书写更容易,程序的效率也大大提高。 XML 是一种表示结构化信息的标准方法,可以用任何文本文件来书写,但我推荐大家使用FlashDevelop或者EditPlus工具,可以减少出错的几率。在AS3.0中,已经可以直接书写XML变量,但我还是比较喜欢用Load的方式加载外部XML文件。
一、XML的基本结构 示例: <card> <root id = '1' type = 'a'> <Cardcolor>黑桃</Cardcolor> <Cardname>决斗</Cardname> </root> <root id = '2' type = 'b'> <Cardcolor>梅花</Cardcolor> <Cardname>雌雄双股剑</Cardname> </root> </card> 以上是一个标准的XML文档。XML文档一般由以下四部分组成: 1. 元素 元素是包含在开始标签和结束标签之间的内容。元素当中可以包含其他元素。 如 元素1: <Cardcolor>黑桃</Cardcolor> 元素2: <root id = '1' type = 'a'> <Cardcolor>黑桃</Cardcolor> <Cardname>决斗</Cardname> </root> 2. 属性 属性是和元素相关联的,并且写入到元素的开始标签内的内容。 如<root id = '1' type = 'a'>,可以理解为:<root>元素拥有2个属性,分别是id属性和type属性。 3. 注释 包含在 <!-- 和 -->标签之间的内容,用以说明XML文档,示例中略。 如:<!-- 这是一条注释。 --> 4. 处理指令 处理指令用来告诉解析XML的处理器,一些相关的应用信息。 比如:<?xml version="1.0" encoding="UTF-8"?> 我除了在crossdomain.xml用到外,平时也没怎么用到,其他功能也不是太清楚,就不多做说明了。
二、XML的书写方式 1. 外部文档 在外部文档中,只要直接把示例的代码复制一份,然后粘贴到一个文本文件中,然后保存为一个后缀名为xml的文件即可。如card.xml 2. AS3.0中 在AS3.0中,可以直接保存至XML变量中,方法有以下几种: (1) 直接把XML文本赋予XML对象,如: var myXML:XML = <card> <root id = '1' type = 'a'> <Cardcolor>黑桃</Cardcolor> <Cardname>决斗</Cardname> </root> <root id = '2' type = 'b'> <Cardcolor>梅花</Cardcolor> <Cardname>雌雄双股剑</Cardname> </root> </card> 如果要把XML写入到AS,那这种方式是最常用的方式。 (2) 变量赋值的方式,如: var str:String = "<card><root><Cardcolor>黑桃</Cardcolor><Cardname>决斗</Cardname></root></card>"; var myXML:XML = new XML(str); 这种方式由于不能很好的显示XML的结构,所以我不推荐使用。但是如果是程序生成XML,那这种方式还是有用武之地的。
另外着重要说明的是,在XML中是可以用变量的,但需要用{}将变量名括起来。如示例可以用下面的方式完成: var card1:String = "Cardcolor"; var card2:String = "Cardname"; var con1:String = "黑桃"; var con2:String = "梅花"; var myXML:XML = <card> <root id = '1' type = 'a'> <{card1}>{con1}</{card1}> <{card2}>决斗</{card2}> </root> <root id = '2' type = 'b'> <{card1}>{con2}</{card1}> <{card2}>雌雄双股剑</{card2}> </root> </card> 采用变量的方式,对于用程序来实现XML是有极大方便的。但这里需要注意的是:不要把标签的<>号也用变量来完成。如var card1:String = "<Cardcolor>";这样是会报错的。
三、XML的载入
如果XML是用外部文件存放的形式,那需要载入该XML文档。 载入XML需要用到URLLoader类,方式如下: var myXML:XML = new XML(); var xmlurl:String = "card.xml"; var myXMLURL:URLRequest = new URLRequest(xmlurl); var myLoader:URLLoader = new URLLoader(myXMLURL); myLoader.addEventListener(Event.COMPLETE,xmlLoaded); function xmlLoaded(event:Event):void { myXML = XML(myLoader.data); trace(myXML.toXMLString()); } 这段代码我这里就不做说明了,如果实在看不懂,就直接引用吧。
四、XML的解析 在AS3.0中,用点符号解析元素,用@符号解析属性,如: 例1:我们要解析第二个<Cardname>标签,可以用下面的语句: trace(myXML.root[1].Cardname); 例2:我们要解析第二个<root>标签的属性,可以用下面的语句: trace(myXML.root[1].@type); 在AS3.0中,解析的方式非常灵活,可以很方便的实现特定目标的解析,如要实现例1,也可以用以下两种方式: 第一种,用属性解析 trace(myXML.root.(@id == 2).Cardname); 第二种,用其他元素解析 trace(myXML.root.(Cardcolor == "梅花").Cardname); 例2也是相同,我这里就不写出来了,大家可以自己尝试一下。多多操作,肯定都会的。 当然,其他还有非常多的方式可以实现同样的目的,在下一篇里我还会讲到。这里就先不多做叙述了。
今天的这篇,是最基础的,也是最常用的,希望大家务必详细了解! 下一篇,还是讲解XML的知识,内容会更加深入些。 本文出自 “寂寞风之谷” 博客,请务必保留此出处http://www.52php.cn/article/p-gwzcdvae-ed.html (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |