XML的外部讀取
包括讀取外部xml文件,和通過URL讀取xml。AS3.0中不像2.0那樣集成了一個load()。 AS3.0在架構(gòu)上就設計了所有與外部打交道的都由URLrequest對象來進行,數(shù)據(jù)都由URLloader對象來接受。這個我們會在下一部分教程詳細講解。這一次只要知道這樣的架構(gòu)設計是深思熟慮,且簡潔優(yōu)美的即可。
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("數(shù)據(jù)裝載完成."); trace (myXML); }
XML的操作
1.查詢
//顯示level為4的節(jié)點的title值 trace (kingdaXML.item.(level == 4).title); //output:Document Class //顯示level>2的節(jié)點的title值,本處結(jié)果大于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);
2.添加或者修改屬性 方便的不能再方便,直接寫即可。爽翻天啊。
//把id == 1的節(jié)點level值改為2 kingdaXML.item.(@id==1).level = 2; //把id==1的節(jié)點添加一個屬性 page kingdaXML.item.(@id==1).page = 100; trace (kingdaXML.item.(@id==1));
3.按某條件插入節(jié)點
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的節(jié)點后面 kingdaXML = kingdaXML.insertChildAfter(kingdaXML.item.(@id==2), newNode1); //把newNode1插入到id==2的節(jié)點前面 kingdaXML = kingdaXML.insertChildBefore(kingdaXML.item.(@id==2), newNode2); trace (kingdaXML);
XML的高級操作
常用的操作上面已經(jīng)介紹的很清楚了。高級操作則是留給對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()可以得到一份現(xiàn)有XML的值拷貝。
var kingdaCopy:XML = kingdaXML.copy();
對kingdaCopy操作就不會影響kingdaXML對象了。
4.極有用的descendants函數(shù)返回一個XMLList對象,包括所有的子節(jié)點。 設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程序移植。其余不推薦。
ActionScript 3.0系列教程(5):強大的事件機制
出處:藍色理想
責任編輯:moby
上一頁 爽快使用XML [1] 下一頁
◎進入論壇Flash專欄版塊參加討論
|