XML类(2008-10-06 16:44:34) 标签:xml as 杂谈 分类:ActionScript 先看一个例子: var imageXML:XML = <images> <image source="images/Image1.jpg" thumb="thumbnails/Image1.jpg">Description of image 1.</image> <image source="images/Image2.jpg" thumb="thumbnails/Image2.jpg">Description of image 2.</image> <image source="images/Image3.jpg" thumb="thumbnails/Image3.jpg">Description of image 3.</image> <image source="images/Image4.jpg" thumb="thumbnails/Image4.jpg">Description of image 4.</image> </images>; trace(imageXML.children()[0].attribute("source")) //输出:images/Image1.jpg trace(imageXML.image[0].attribute("source"));//输出:images/Image1.jpg trace(imageXML.child("image")[0].attribute("source"));//输出:images/Image1.jpg 常用方法: myXML.children():不可以有参数,括号必须要有 myXML.节点名称:访问全部该节点的属性内容 myXML.child() :必须有一个字符串类型的参数 一个XML文件大致包含三个部分: 根节点:每个XML文件有且只能有一个根节点,这里是images 节点:每个XML文件可以有多个节点,可以用“.”或child()、children()方法访问,这里的节点为image,注意:访问的属性是该节点包含的属性,而不是节点里节点属性的内容,这里trace(imageXML.image[0]);输出为Description of image 1.而不是<image source="images/Image2.jpg" thumb="thumbnails/Image2.jpg">Description of image 2.</image> 节点里的节点属性:包含在节点里,这里有source、thumb,这些节点里的节点属性的内容需要使用attribute(“节点属性名称”)方法来访问。 外部调用xml文件: var imageLoader:Loader; var xml:XML; var xmlList:XMLList; var xmlLoader:URLLoader = new URLLoader(); xmlLoader.load(new URLRequest("data/images.xml")); xmlLoader.addEventListener(Event.COMPLETE,xmlLoaded); function xmlLoaded(event:Event):void { xml = XML(event.target.data);//这里不能写成xml = event.target.data as XML; xmlList = xml.children(); for(var i:int = 0;i<xmlList.length();i++) { imageLoader = new Loader(); imageLoader.load(new URLRequest(xmlList[i].attribute("thumb"))); addChild(imageLoader); imageLoader.x = 25; imageLoader.y = 150*i + 25; } } 其中imageLoader.load(new URLRequest(xmlList[i].attribute("thumb")));一句可以改成imageLoader.load(new URLRequest(xml.children()[i].attribute("thumb")));或者imageLoader.load(new URLRequest(xml.child("image")[i].attribute("thumb")));后两种方法易记,但没xmlList简单。 创建XMLList: myXMLList:XMLList; myXMLList = myXML.children(); 对象声明与对象实例化: 一般声明与实例化在同语句里执行,比如var xmlLoader:URLLoader = new URLLoader(); 但是如果某个对象需要实例化多个对象,比如使用for循环,创建多个,这样的话就先进行声明,在for循环里进行实例化,比如: var imageLoader:Loader; for(var i:int = 0;i<xmlList.length();i++) { imageLoader = new imageLoader(); } Loader与URLLoader: Loader类可用于加载swf文件或图像(jpg、png、gif)文件。 URLLoader类以文本、二进制数据或 URL 编码变量的形式从 URL 下载数据。 在上面的例子中要载入image.xml文件,所以使用URLLoader类,加载图片则使用Loader类。 调用xml文件里的数据: 一种方法就是用myXML.children()[i].attribute(“属性名”)的方法,上例中用的就是这种方法。也可以给Loader实例的name属性赋值,然后在事件函数中调用event.target.name就可以调用xml文件中的数据了。比如: imageLoader.name = xml.child(“image”)[i].attribute(“source”); imageLoader.addEventListener(MouseEvent.CLICK,showPicture); function showPicture(event:MouseEvent):void { imageLoader = new Loader(); imageLoader.load(new URLRequest(event.target.name)); } 动态载入图片的相应文本: imageLoader.addEventListener(MouseEvent.CLICK, showPicture); 在showPicture函数中添加语句: for(var j:int = 0;j<xmlList.length();j++) { if(xmlList[j].attribute("source")==event.target.name) { imageText.text = xml.children()[j]; addChild(imageText); } } TextFieldAutoSize属性: 它是在设置TextField类的autoSize属性时用到的常量,有: TextFieldAutoSize.CENTER :文本居中 TextFieldAutoSize.LEFT :左对齐,即文本字段的左侧固定不变,右侧(根据字符长度)自动调整单行的大小 TextFieldAutoSize.NONE :不调整大小 TextFieldAutoSize.RIGHT :右对齐,参考左对齐 添加图片缓动载入效果: 在showPicture函数添加:var fadeTween:Tween = new Tween(imageLoader,"alpha",None.easeNone,0,1,5);

评论