關(guān)于XML在FLASH中的應(yīng)用,以前寫過幾篇。也收集了幾篇來自網(wǎng)絡(luò)的。不過,都是一些非常簡單而常用的。在這里,我把XML的其他相關(guān)說明總結(jié)一下。有不足之處,希望大家能相互補充。只為了一個共同的目的:共同提高。
一、書寫標(biāo)準(zhǔn)的XML需要注意以下幾點:
- 一個標(biāo)準(zhǔn)的XML文檔必須要在第一行以"<?xml>"開頭,以及一個"<?/>"結(jié)尾,其中開頭部分需申明XML的版本,如:version="1.0",也應(yīng)包含一個關(guān)于編碼的聲明:“encoding="utf-8"”;
- XML要求所有的標(biāo)簽必須在文檔結(jié)束之前被閉合,如果標(biāo)簽中包含內(nèi)容,則必須寫成“<標(biāo)簽名>內(nèi)容</標(biāo)簽名>"的格式,如果內(nèi)容為空,則應(yīng)寫在</標(biāo)簽名>的格式;即,后面必須有</XXX>這種格式的。
- 每個XML都有有一個根元素,也叫根節(jié)點。
- 節(jié)點有節(jié)點值和屬性。
- XML的節(jié)點值如果出現(xiàn)與XML標(biāo)簽關(guān)鍵字一樣的字符,XML將會無法解析文檔,比如,某個節(jié)點值如果是一個大于或者小于號,就會讓解釋器產(chǎn)生一個錯誤。
二、在FLASH中創(chuàng)建一個簡單的實例:
//創(chuàng)建一個新的XML類實例 var my_XML:XML=new XML(); //創(chuàng)建一個TextArea組件,用于顯示此XML內(nèi)容 var my_TextArea:mx.controls.TextArea; //加載外部XML文件 my_XML.load("my_xml.xml"); //為load函數(shù)定義onLoad函數(shù)---此處是必須的。只有當(dāng)加載成功后,才能控制XML。否則不能。 my_XML.onLoad=function(ok:Boolean){ if(ok){ my_TextArea.text+=this; }else{ my_TextArea.text+="加載失敗..." } } //忽略空白: my_XML.ignoreWhite=true;
三、關(guān)于FLASH解析XML詳解,說白了,也就是對節(jié)點的讀取。
首先,來看看這幅圖,稍微加點印象。
點擊放大
下面,我將對XML文件的解析方面做詳細的介紹。 為了便于講解,在此,我舉一個簡單的例子。
1、新建一個記事本文件,在里面輸入如下內(nèi)容:
<購買物品> <襯衣 顏色="白色" 品牌="雅戈爾">1件</襯衣> <褲子 顏色="深藍" 品牌="王子褲">2件</褲子> <鞋子 顏色="黑色" 品牌="紅蜻蜓">3雙</鞋子> <總花費金額> <打的費>50元</打的費> <貨物金>1000元</貨物金> </總花費金額> </購買物品>
然后保存為"goods.xml",注意,在編碼處,要選擇"Unicode"。
2、下面,就對里面的各項值進行解讀。 讀取整個XML文件的方法: 在剛才的XML的同級目錄下新建一FLA文件,然后在場景中放置一TextArea組件。并賦實例名“my_TextArea”, 然后在第一幀中添加如下代碼:
var my_XML:XML=new XML(); System.useCodepage=true; var my_TextArea:mx.controls.TextArea; my_XML.load("goods.xml") my_XML.onLoad=function(ok:Boolean){ if(ok){ my_TextArea.text+=this; }else{ my_TextArea.text+="加載失敗" } }
按CTRL+ENTER測試,即可以看效果。
首先,我們來看看如何對XML中的節(jié)點名稱或者節(jié)點屬性進行讀取呢? 比如,我們要讀取如例子中的"購買物品"這幾個字符,該如何操作呢? 我們使用如下語句: this.firstChild.nodeName; 如果要讀取"襯衣": this.firstChild.childNodes[0].nodeName; 如果要讀取"1條": this.firstChild.childNodes[1].childNodes[0].nodeValue; 如果要讀取褲子的品牌: this.firstChild.childNodes[1].attributes.品牌;
將XML讀取進LIST組件中:
System.useCodepage = true; var my_TextArea:mx.controls.TextArea; var my_List:mx.controls.List; var my_XML:XML = new XML(); my_XML.ignoreWhite = true; my_XML.load("shopping.xml"); my_XML.onLoad = function(ok:Boolean) { if (ok) { var childnodes = this.firstChild.childNodes; for (i=0; i<childnodes.length; i++) { my_List.addItem({label:childnodes.nodeName}); } } else { my_TextArea.text += "加載失敗"; } };
第一個節(jié)點:firstChild: 用法:this.firstChild; 最后一個節(jié)點:lastChild 用法:this.firstChild; 兄弟節(jié)點:nextSibling: 用法:this.firstChild.childNodes[0].nextSibling; 另一個兄弟節(jié)點:previousSibling: 用法:this.firstChild.childNodes[0].previousSibling; 區(qū)別:nextSibling是朝后,而previousSibling是當(dāng)前之前; 父類節(jié)點:parentNode: 用法:this.firstChild.parentNode;
上述所有實例演示: http://www.taoshaw.com/taoshaw/study/LoadXml/LoadXML.swf
源文件下載:loadXML.rar
經(jīng)典論壇交流: http://bbs.blueidea.com/thread-2845168-1-1.html
本文鏈接:http://m.95time.cn/tech/multimedia/2008/5663.asp
出處:藍色理想
責(zé)任編輯:bluehearts
◎進入論壇RIA設(shè)計與應(yīng)用版塊參加討論
|