上面的代碼解釋了我們的XML文件并創(chuàng)建了一個(gè)對(duì)組對(duì)象。如果在這之前你從來(lái)沒(méi)有處理過(guò)XML數(shù)據(jù)理解這段代碼是有點(diǎn)困難的。當(dāng)解釋完成了以后,如果我們要訪(fǎng)問(wèn)第一個(gè)軌道的mp3文件的地址我們會(huì)用“playlist_arr[0].location”,這里就會(huì)得到他的正確的地址。而對(duì)我們來(lái)說(shuō),我們可以把這個(gè)做得更好……
上面那段代碼,在我的機(jī)子上,用了5毫秒去解除。這里并不怎么樣,但不要忘了我們只是解釋了兩個(gè)軌道而已。
下面是一個(gè)更好的釋放相同數(shù)據(jù)的方法,而不用依靠循環(huán)地讀取子節(jié)點(diǎn):
playlist_arr = new Array();
playlist_xml = new XML(); playlist_xml.ignoreWhite = true; playlist_xml.onLoad = function(success) { if (success) { var startTime = getTimer(); var track_xml = playlist_xml.firstChild.firstChild; while (track_xml != null) { // add the track data to our playlist! playlist_arr.push(getTrackData(track_xml)); track_xml = track_xml.nextSibling; } trace("Total parse time: " + (getTimer()-startTime)); } else { trace("Error loading playlist."); } delete playlist_xml; }
function getTrackData(track_xml) { var trackData = new Object(); var data_xml = new XML(); data_xml = track_xml.firstChild; while (data_xml != null) { trackData[data_xml.nodeName] = data_xml.firstChild.nodeValue; data_xml = data_xml.nextSibling; } return trackData; }
playlist_xml.load("playlist.xml");
上面這個(gè)方法,我們可以得到相同的結(jié)果,但是卻快了一點(diǎn),可讀性高了一點(diǎn)。在我的機(jī)子上只用了2毫秒來(lái)解釋這兩條軌道信息并裝載到playlist數(shù)組。
5毫秒和2毫秒可能差別不大……如果我使到這個(gè)播放列表有20條軌道時(shí),第一種處理方法用了113毫秒,而第二種方法則只用了20毫秒。是不是有覺(jué)得有點(diǎn)不一樣?
在這個(gè)例子中我給代碼加了注釋。我們最主要就是理解XML對(duì)象的onload事件。注意到我在第二種方法通過(guò)建立一個(gè)getTrackData函數(shù)使代碼更可讀了嗎?這里面獲得一個(gè)節(jié)點(diǎn)對(duì)象作為參數(shù)并返回一個(gè)代表著軌道信息的對(duì)象。
不用在節(jié)點(diǎn)中頻繁地讀取每一個(gè)元素,我在這里只用了兩個(gè)XML在FLASH中的屬性,firstChild和nextSlibling。即首節(jié)點(diǎn)和下一個(gè)節(jié)點(diǎn)或元素。在循環(huán)開(kāi)始之前,我去掉了所有的東西,只把首點(diǎn)節(jié)點(diǎn)作為一個(gè)XML值(在例子中為track_xml)。然后,我們的循環(huán)是簡(jiǎn)單:當(dāng)有節(jié)點(diǎn)的時(shí)后,我們釋放信息。在循環(huán)的結(jié)尾,我們已得到了數(shù)據(jù),并使XML值跳到下一個(gè)節(jié)點(diǎn)。當(dāng)下一個(gè)節(jié)點(diǎn)的值回值為空時(shí),表示沒(méi)有信息去處理,我們退出循環(huán)。
現(xiàn)在你已看到了一個(gè)截然不同的XML對(duì)象的解釋方法。不用依靠讀取子節(jié)點(diǎn),我們利用nextSibling的優(yōu)點(diǎn)來(lái)提高XML解釋的速度和可讀性。你們?cè)S多人也許已用過(guò)這種方法,但我想在這里寫(xiě)一下,因?yàn)檫@種方法并不是每個(gè)人都知道的。
出處:閃客帝國(guó)
責(zé)任編輯:地獄天堂
上一頁(yè) 讓Flash更好的利用Xml 下一頁(yè)
◎進(jìn)入論壇Flash專(zhuān)欄版塊參加討論
|