前往顾页

flash AS3操纵XML 根本教程

时候:2011-10-17 18:38来源:知行网www.zhixing123.cn 编辑:麦田守望者

简朴说说AS3.0中对XML支撑的不合吧:

.AS2.0对XML的支撑勉勉强强,姑息着可以用。而AS3.0中对XML的支撑是全方位的,极其强年夜和矫捷的。

AS2.0对XML的支撑不是内建的(build-in),也并不是基于ECMAScript for XML(E4X)标准。而AS3.0中对XML的支撑适合E4X标准,它的设想有三个长处:
1. 简略单纯。包含操纵和可读性。你会发明AS3.0中对XML的操纵如同对一个浅显Object工具一样浅近易懂。语句非常浅白流利。
2. 持续性。其各个服从的设想和AS3.0其他的部分思唯分歧,易于了解。
3. 熟谙。操纵符和操纵逻辑对我们来讲都相当熟谙易用。
在AS2.0期间,为体味决这部分的问题

效力。
效力包含两方面,开辟效力,和代码履行效力。开辟效力的阐述见上。AS3.0对XML的履行效力远远高过没有内建XML支撑的AS2.0。

XML的输入

在AS2.0期间,在代码行中输入XML代码是一种痛苦。如果不是是从文件中读取,那么我们就要忍耐一长串挤在一路的字符串。

而在AS3.0中,太简朴了。直接遵循XML的内容输便可,想换行就换行,想Tab就Tab,就一个字,爽。

新建一个fla,选中第一帧,F9翻开行动面板,输入以下代码:


//例1


代码:

var kingdaXML:XML = <tutorial> <item id=’1’> <level>2</level> <title> First touch of Flash 9</title> </item> <item id=’2’> <level>3</level> <title> Binding Classes</title> </item> <item id=’3’> <level>4</level> <title>Document Class</title> </item> </tutorial> trace (kingdaXML.item[1].level); //output:3


//例2


代码:

var kS:String = "<root><txt>this is a test</txt></root>"; var kXML:XML = new XML(kS); trace (kXML.txt); //output:this is a test;


例1中重视到没,直接写XML内容在前面,想换行就换行,想tab就tab,多爽。不想AS2.0中写string时,换个行就不可了。

写完这一句后,我们所写出的近似于string的情势立即就被Flash了解成了XML工具了,所以我们顿时便可以用"."操纵符来拜候呼应的属性。本例中拜候了第2个item节点的level值。

这么简练直观的拜候体例是不是是比 AS2.0中那千遍一律的childNodes要好很多?

不过要重视,最后可以加";"结束。但我为了XML的视觉美妙没有加。这个没有关系,编译时不会考虑这一点。

究竟上只需你喜欢,AS1.0, 2.0, 3.0中语句结束都可以不加";"号。但是这其实不是一个好的编程习惯,更不适合松散的自我语法请求。是以我建议,除XML可以不加外,其他的都应当加,呵呵。

例2揭示了若何将一个包含了XML内容的字符串转换成XML工具。用的是XML的机关函数转换的。

AS3更风趣的是,可利用已有的变量来直接机关XML,带来便利的编程特性。以下例。


代码:

var rootNodeName :String = "site"; var subNodeName :String = "orgin"; var subNodeContent :String = "Kingda’s Blog"; var attributeName :String = "url" var attributeValue :String = "http://www.kingda.org"; var extXML:XML = <{rootNodeName} {attributeName}={attributeValue}> <{subNodeName}>{subNodeContent}</{subNodeName}> </{rootNodeName}>; trace (extXML.toString()); /*output: <site url="http://www.kingda.org"> <orgin>Kingda’s Blog</orgin> </site> */


要点就是要把变量用"{}"括起来,并且设置属性时不要再加引号了。

XML的外部读取

包含读取外部xml文件,和经由过程URL读取xml。AS3.0中不像2.0那样集成了一个load()。
AS3.0在架构上就设想了所有与外部打交道的都由URLrequest工具来进行,数据都由URLloader工具来接管。这个我们会鄙人一部分教程详细讲授。这一次只需晓得如许的架构设想是沉思熟虑,且简练美好的便可。
代码:var myXML:XML = new XML(); //初始化XML地点,可所以本地的"xxx.xml",也能够是以下的URL地点。 var XML_URL:String = "http://www.kingda.org/blog/index.xml"; //我的Blog RSS Feed var myXMLURL:URLRequest = new URLRequest(XML_URL); var myLoader:URLLoader = new URLLoader(myXMLURL); //增加装载完成侦听器, //Event.COMPLETE的值是"complete",直接用此字符串也能够。 myLoader.addEventListener(Event.COMPLETE, xmlLoaded); function xmlLoaded(evtObj:Event) { myXML = XML(myLoader.data); trace("数据装载完成."); trace (myXML); } XML的操纵 1.查询 2.增加或点窜属性
便利的不克不及再便利,直接写便可。爽翻天啊。

//把id == 1的节点level值改成2
kingdaXML.item.(@id==1).level = 2;
//把id==1的节点增加一个属性 page
kingdaXML.item.(@id==1).page = 100;
trace (kingdaXML.item.(@id==1));

3.按某前提拔出节点
代码:

var newNode1:XML = <item id=’2.5’><level>0</level><title>None</title></item> var newNode2:XML = <item id=’1.5’><level>0</level><title>None</title></item> //把newNode1拔出到id==2的节点前面 kingdaXML = kingdaXML.insertChildAfter(kingdaXML.item.(@id==2), newNode1); //把newNode1拔出到id==2的节点前面 kingdaXML = kingdaXML.insertChildBefore(kingdaXML.item.(@id==2), newNode2); trace (kingdaXML);
XML的高级操纵

常常利用的操纵下面已介绍的很清楚了。高级操纵则是留给对XML利用更深的兄弟们。

几点重视:
1.在AS3.0中, XML类的ignoreWhitespace默许为true。
2.AS3.0支撑对comments的直接操纵。但默许:
代码:

XML.ignoreComments = false; var kingdaXML:XML = <item> <!-- comment 1--> <!-- comment 2--> </item>; trace(kingdaXML.toXMLString()); //默许为true时,不会显现comment的
拜候comment用

trace(kingdaXML.comments()[1].toXMLString());

3.XML支撑克隆。

利用copy()可以获得一份现有XML的值拷贝。

var kingdaCopy:XML = kingdaXML.copy();

对kingdaCopy操纵就不会影响kingdaXML工具了。

4.极有效的descendants函数前往一个XMLList工具,包含所有的子节点。
设ignoreComments = false;和ignoreProcessingInstructions = false后,连comments和process instructions也会包含在这个XMLList工具中。

应用示例以下:
代码:

XML.ignoreComments = false; var xml:XML = <body> <!-- comment --> text1 <a> <b>text2</b> </a> </body>; trace(xml.descendants("*").length()); // 5 trace(xml.descendants("*")[0]); // // <!-- comment --> trace(xml.descendants("*")[1].toXMLString()); // text1 trace(xml.descendants("a").toXMLString()); // <a><b>text2</b></a> trace(xml.descendants("b").toXMLString()); // <b>text2</b>
另有太多的XML有效操纵服从了(如对namespace的操纵)。用到时再去翻参考书吧。
以上的介绍可以满足绝年夜部分应用了。

对了AS2.0已有的XML类,在3.0中变成了XMLDocument类,利用体例不变。便于AS2.0法度移植。其他不保举 代码:

//显现level为4的节点的title值
trace (kingdaXML.item.(level == 4).title);
//output:Document Class
//显现level>2的节点的title值,本处成果年夜于1,所所以一个XML Array。
trace (kingdaXML.item.(level > 2).title);
/*output:
<title>Binding Classes</title>
<title>Document Class</title>
*/
//利用属性用@开首便可。真便利。
trace (kingdaXML.item.(level > 2).@id);
//output:23
//这儿要重视,实际上是2,3。一个Array.
//也能够用属性来做判定

trace (kingdaXML.item.(@id > 1).title);

 

顶一下
(0)
0%
踩一下
(0)
0%
------分开线----------------------------
标签(Tag):FLASH FLASH实例教程 flash技能 flash教程
------分开线----------------------------
颁发评论
请自发遵循互联网相关的政策法规,严禁公布色情、暴力、革命的谈吐。
评价:
神色:
考证码:点击我更换图片
猜你感兴趣