XML,名字是不是很COOL啊,其實(shí),F(xiàn)LASH里面用XML不難(其他地方的應(yīng)用就……所以千萬別說XML不難,是FLASH里面用不難),呵呵,好吧,開始吧。
十三章:XML
XML是一種標(biāo)記語言,通常用于儲(chǔ)存,組織和傳輸數(shù)據(jù)
XML文檔主要由一系列的元素(elements)和屬性(attributes)組成,看下面一個(gè)XML的例子:
<BOOK> <TITLE>ActionScript: The Definitive Guide</TITLE> <AUTHOR SALUTATION="Mr.">Colin Moock</AUTHOR> <PUBLISHER>O'Reilly</PUBLISHER> </BOOK>
這個(gè)例子就是由元素 BOOK, TITLE, AUTHOR, PUBLISHER 組成的
在元素<AUTHOR SALUTATION="Mr.">里就包含了一個(gè)屬性:SALUTATION
這些元素怎么讓瀏覽器解釋是什么意思呢?它需要DTD,一套決定這些標(biāo)記的意義的規(guī)則。(例如我們常聽說的WML、SVG,它們都是XML,但對(duì)應(yīng)不同的DTD)
XML與HTML想比要求格式更嚴(yán)格,格式要求: * tags 一定要嵌套 (就是說有<book>就一定要有</book>) * 一定要有一個(gè)根元素 (例如例子中的 BOOK) * 開始部分要用XML聲明標(biāo)記 :<?xml version="1.0"?>
但是AS里面的XML不需要DTD(這就是我說FLASH里面用XML不難的原因,哈哈)
從我們面向?qū)ο蟮慕嵌葋砜,我們XML的內(nèi)容可以當(dāng)做為對(duì)象,下圖就是我們建立XML對(duì)象的層次結(jié)構(gòu)
FLASH已經(jīng)內(nèi)建有XML類讓我們可以定義自己的XML對(duì)象,同時(shí)XML對(duì)象還有很多方法。
我們還是更進(jìn)一步用例子分析吧,如果我們建立了如上圖的XML對(duì)象,那么FLASH首先會(huì)自動(dòng)建立一個(gè)元素DOCUMENT,下面才是我們自己的元素。
本來是第一個(gè)元素的BOOK成為了DOCUMENT的第一個(gè)節(jié)點(diǎn)(node),不過我們把它繼續(xù)當(dāng)我們XML數(shù)據(jù)的根也無妨
當(dāng)一個(gè)節(jié)點(diǎn)包含于另一個(gè)節(jié)點(diǎn)時(shí),這個(gè)節(jié)點(diǎn)稱為另一節(jié)點(diǎn)的子節(jié)點(diǎn)(child),反之另一節(jié)點(diǎn)稱為其的父節(jié)點(diǎn)(parent)
例子中BOOK就是DOCUMENT的child,DOCUMENT就是BOOK的parent
再看圖,BOOK有7個(gè)子節(jié)點(diǎn),是不是和你想象不同?多了四個(gè)節(jié)點(diǎn)#text,因?yàn)镕LASH把標(biāo)記之間的空格和回車也讀成一個(gè)節(jié)點(diǎn)了。
幾個(gè)子節(jié)點(diǎn)的關(guān)系成為兄弟(siblings),如果要找AUTHOR的下一個(gè)兄弟(next sibling),F(xiàn)LASH就會(huì)給你找來#text
這可不是我們想要的,解決的方法 * 直接在XML里面把空格回車都刪除掉,就是說一個(gè)TAG緊挨著一個(gè) * 用AS把無用的子節(jié)點(diǎn)刪除 * 在FLASH讀入XML源數(shù)據(jù)之前,將該XML對(duì)象的一個(gè)屬性ignoreWhite設(shè)置為true,但是該屬性只在R41版本的PLAYER生效(注:網(wǎng)上可以更新的版本為R41,但是隨FLASH附帶的FLASHPLAYER的版本是R30)
再回到我們的例圖,三個(gè)子節(jié)點(diǎn)下面還有子節(jié)點(diǎn),最尾的節(jié)點(diǎn)也可以叫葉節(jié)點(diǎn)。
但是圖里面還有個(gè)東西我們沒找到,就是AUTHOR的屬性SALUTATION,屬性不是該節(jié)點(diǎn)的子節(jié)點(diǎn),要訪問我們屬性,要用XML.attributes
概念先說這么多,現(xiàn)在看看我們?cè)趺窗裍ML源程序輸入進(jìn)FLASH
首先定義一個(gè)新的XML對(duì)象了: myDocument = new XML(); 這個(gè)對(duì)象是空的,我們通過appendChild, parseXML, 和 load 三種方法來輸入數(shù)據(jù) 當(dāng)然我們也可以在定義的時(shí)候就輸入數(shù)據(jù): myDocument = new XML('<P>hello world!</P>'); 這時(shí)候我們的myDocument就有了一個(gè)叫P的子節(jié)點(diǎn),P的葉節(jié)點(diǎn)是hello world! 之后我們就可以訪問這個(gè)XML對(duì)象了,firstChild這個(gè)XML屬性指向第一個(gè)子節(jié)點(diǎn),childNodes是XML對(duì)象的子對(duì)象,指向所有的子節(jié)點(diǎn) myDocument.firstChild // Accesses P myDocument.childNodes[0] // Also accesses P 兩個(gè)AS語句指向的都是節(jié)點(diǎn)P
要訪問葉節(jié)點(diǎn)的內(nèi)容需要屬性nodeValue 我們要顯示P節(jié)點(diǎn)的子節(jié)點(diǎn)的內(nèi)容,就要寫成: trace(myDocument.firstChild.firstChild.nodeValue); 要給它賦值: myDocument.firstChild.firstChild.nodeValue = "goodbye cruel world"; 要?jiǎng)h除P節(jié)點(diǎn),用方法removeNode: myDocument.firstChild.removeNode(); 新建一個(gè)節(jié)點(diǎn)叫P,用方法createElement創(chuàng)建元素: newElement = myDocument.createElement("P"); 再將該元素加進(jìn)去作為一個(gè)節(jié)點(diǎn),用方法appendChild: myDocument.appendChild(newElement);
做一個(gè)葉節(jié)點(diǎn)方法類似: newText = myDocument.createTextNode("XML is fun"); myDocument.firstChild.appendChild(newText);
更詳盡的方法還是查閱AS字典吧
出處:藍(lán)色理想
責(zé)任編輯:qhwa
上一頁 第四個(gè)版本的選擇題 下一頁 最后一個(gè)版本選擇題
◎進(jìn)入論壇Flash專欄版塊參加討論
|