簡述在FLASH讀取XML的資料

2021-04-18 22:01:37 字數 3866 閱讀 9315

在flash中,使用xml介面獲取外部資料是最有效的方法之一.(通常還有webserivce介面和loadvars方法)

下面來看乙個簡單的xml文件(city.xml)

這個文件描述的是城市地區的資訊

<?xml version="1.0" encoding="gb2312"?>

簡單介紹一下xml文件格式的書寫規範:

第一行:

這是乙個xml文件的描述資訊.其中定義了該xml文件的一些基本屬性,包括:版本資訊(version),使用的字元編碼(encoding).

第二行:

(雖然在flash中我們用不到節點的任何屬性,但是合式的xml文件必須要求乙個根節點)

在xml文件中,這是乙個根節點.xml規定所有標籤必須有閉合.所以,在最後一行使用對應的標籤來閉合.同樣,單行的xml節點也需要閉合,例如:其中"/"符號就表示單行的節點閉合."name","code","pnum"是節點的屬性,寫法就是:屬性名="屬性值" 這樣的名/值對.至於節點名和屬性名都是可以自定義的,也就是說可以任意命名.但是還是建議要盡量規範

""節點是""的子節點,相應的""叫做""的父節點

在這個xml文件中有3個子節點,我們資料就儲存在這3個子節點的屬性中,分別有:城市名稱(name),城市**(code),城市人口數目(pnum)

我們要做的最終目的就是在flash中獲取這些節點的屬性值

下面來看乙個flash呼叫xml的例項

system.usecodepage = true;

var doc:xml = new xml();

doc.load("city.xml");

doc.ignorewhite = true;

doc.onload = function(success)

}分析:

system.usecodepage = true;

如果在xml文件中使用了中文

"ignorewhite"-xml物件的乙個屬性:指定xml文件忽略空白,因為在xml中乙個換行在flash中會被視為乙個節點

doc.onload = function(success){}

"onload"-xml物件的乙個方法.將會返回乙個布林值"true或false".用來判斷xml是否被成功載入.如果載入成功則會返回"true",反之則返回"false"

此處為該方法使用了乙個函式,其引數"success"用來貯存上述的布林值

if(success){}

乙個判斷語句:如果載入成功(即success的值為"true"),則觸發括號內的動作

trace(doc.childnodes[0].childnodes[0].attributes.name);

輸出doc(此時"city.xml"中的資料已經包含到doc這個xml物件當中)這個xml物件的第乙個節點下的第一

個子節點的"name"屬性值

childnodes-xml物件的乙個屬性,它的值的型別是陣列型.xml的乙個節點可以在flash中通過這個屬性來表示其包含的資料.

由於flash中陣列的長度計算是由"0"開始,所以我們xml文件中的第乙個節點就儲存在陣列的"0"位置.而不是"1"

所以,我們取出xml文件的第乙個節點-"",就應該表示成這樣"childnodes[0]"

同樣,我們取出xml物件根節點("")下的第乙個子節點(""),就表示成doc.childnodes[0].childnodes[0]

相應的,取出第二個子節點:doc.childnodes[0].childnodes[1]

第三個子節點:doc.childnodes[0].childnodes[2]

(這一步中,需要涉及到flash中陣列物件的使用原理)

在flash與xml的資料互動中,可能資料的表現是最難的一步.

針對上面資料表現方式,我們可以充分利用陣列的便利性來做

假如已經獲得乙個xml物件"doc"

首先,我們將這個xml中使用到的資料轉換為乙個陣列物件來表示

var mylist:array = doc.childnodes[0].childnodes;//直接將xml文件根節點下的的所有子節點放到乙個陣列中

trace(mylist[0].attributes.name+","+mylist[0].attributes.code+","+mylist[0].attributes.pnum);//輸出第乙個"city"節點所有的屬性值

trace(mylist[1].attributes.name+","+mylist[1].attributes.code+","+mylist[1].attributes.pnum);//輸出第二個"city"節點所有的屬性值

trace(mylist[2].attributes.name+","+mylist[2].attributes.code+","+mylist[2].attributes.pnum);//輸出第三個"city"節點所有的屬性值

輸出結果:

上海,021,500000

北京,010,600000

浙江,057,1000000

/*以上完整的**為*/

system.usecodepage = true;

var doc:xml = new xml();

doc.load("city.xml");

doc.ignorewhite = true;

doc.onload = function(success)

}/***結束*/

為了在flash中其他的位置都能夠訪問到我們所需要的xml資料,我們可以將mylist陣列物件放置到上下文的任意位置

例如:system.usecodepage = true;

var doc:xml = new xml();

var mylist:array = new array();//預先建立乙個陣列物件用來放置xml節點資料,以便flash其他位置的**都能夠訪問

doc.load("city.xml");

doc.ignorewhite = true;

doc.onload = function(success)

}//使用乙個按鈕動作來獲取陣列物件中的乙個city節點資訊

btname.onpress = function()

這樣的寫法當然還不滿足我們一些複雜的需求,而且**過冗長.

使用函式來返回我們需要的資訊,應該是最正確的做法,我們來實現它

按下按鈕時,向函式遞交乙個城市**,返回城市名和人口資訊

system.usecodepage = true;

var doc:xml = new xml();

var mylist:array = new array();//預先建立乙個陣列物件用來放置xml節點資料,以便flash其他位置的**都能夠訪問

doc.load("city.xml");

doc.ignorewhite = true;

doc.onload = function(success)

}//函式開始

function getcityinfo(code)

var cityname:string;//建立乙個字元竄變數來

儲存城市名

var pepcount:string;//建立乙個字元竄變數來儲存居民數量

for(var i=0;i

< p>

if(code eq mylist[i].attributes.code)

}return "城市:"+cityname+",人口:"+pepcount //返回一段文字表達資訊

}//函式結束

/*按鈕的動作*/

btname.onpress = function()

flash讀取XML檔案

關於xml的簡介與編寫格式在下在這就不多談了 因為 大家都是聰明人 對xml的最通常的使用,就是讀取出xml文件中所儲存的資料。我們來建立這個要被讀取的xml文件。你可以用任何一種純文字編輯器來 建立乙個xml文件。開啟你喜歡的純文字編輯器,在其中輸入下面的 這是乙個個人簡歷 明男 21南寧繁男 2...

XML系列 Flash讀取XML資料

以前老師說的對 你會的越多,不會的就越多。假如你會的東西代表乙個圓,那當圓小的時候不會的東西相對來說就比較少,當圓越來越大的時候,由於圓周長的越來越大,那你不會的東西就相對來說是越來越多了 一直以來只知道用簡單的複製黏貼製作東西,很多事情也是一做完了就開始忘卻,flash這個軟體在2000年的時候就...

flash讀取XML格式資料

xml格式 兩種寫法 第一種 宣告省略,不影響flash讀取 假設不宣告xml格式,則必須儲存成utf 8格式,否則用ie開啟xml文件 會出現無效字元等問題 1第乙個 絕對第乙個 2第二個 絕對第二個 第二個可以混合使用.本例就是混合使用,這個格式寫法看自己習慣,我喜歡第二種,呵呵 絕對第乙個 絕...