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