實(shí)驗(yàn)2:
現(xiàn)在做的是把一個(gè)多層嵌套節(jié)點(diǎn)的xml文檔在Flash中輸出來. 新建一個(gè)xml文檔.在記事本中輸入下面的代碼.然后保存為 xml-002.xml
<?xml version="1.0"?> <!--xml-002.xml--> <firstNode name="1"> <childNode name="1.1"> <Node name="1.1.1" /> <Node name="1.1.2" /> <Node name="1.1.3" /> </childNode> <childNode name="1.2"> <Node name="1.2.1" /> <Node name="1.2.2" /> <Node name="1.2.3" /> </childNode> <childNode name="1.3"> <Node name="1.3.1" /> <Node name="1.3.2" /> <Node name="1.3.3" /> </childNode> </firstNode>
上面是一個(gè)多層嵌套節(jié)點(diǎn)的xml文檔.結(jié)構(gòu)是一個(gè)頂層節(jié)點(diǎn)中,嵌套3個(gè)子級(jí)節(jié)點(diǎn),3個(gè)子級(jí)節(jié)點(diǎn)分別嵌套3個(gè)子級(jí)節(jié)點(diǎn).現(xiàn)在又應(yīng)該怎樣在Flash中讀出來呢?其實(shí)原理跟上面一樣.在for中嵌套一個(gè)for就可以了.
打開Flash新建一個(gè)Flash文檔,保存到剛才的xml文檔的目錄中,命名為 xml-02.fla 在第一幀中輸入以下代碼:
//xml-002.fla. //實(shí)例化一個(gè)xml對(duì)象. var myxml:XML = new XML(); //分析時(shí)忽略xml文檔中的空格. myxml.ignoreWhite = true; //加載xml-002.xml文檔. myxml.load("xml-002.xml"); //調(diào)用XML.onLoad事件. myxml.onLoad = function(success:Boolean) { //如果加載成功,success=true;否則success=false; if (success) { trace("加載成功!"); //輸出頂層節(jié)點(diǎn)的節(jié)點(diǎn)名和頂層節(jié)點(diǎn)中屬性name的值. trace(myxml.firstChild.nodeName+":"+myxml.firstChild.attributes.name); //用一個(gè)數(shù)組來引用頂層節(jié)點(diǎn)中子級(jí)節(jié)點(diǎn)的數(shù)組. var child_arr:Array = myxml.firstChild.childNodes; //用嵌套for語句遍歷出xml文檔中的所有數(shù)據(jù). //這個(gè)for遍歷的是頂層節(jié)點(diǎn)下的子級(jí)節(jié)點(diǎn). for (var i = 0; i<child_arr.length; i++) { //輸出頂層節(jié)點(diǎn)下的子級(jí)節(jié)點(diǎn)的節(jié)點(diǎn)名和頂層節(jié)點(diǎn)下的子級(jí)節(jié)點(diǎn)中屬性name的值. trace(child_arr[i].nodeName+":"+child_arr[i].attributes.name); //這個(gè)for遍歷的是頂層節(jié)點(diǎn)下的子級(jí)節(jié)點(diǎn)下的子級(jí)節(jié)點(diǎn). for (var j = 0; j<child_arr[i].childNodes.length; j++) { //輸出頂層節(jié)點(diǎn)下的子級(jí)節(jié)點(diǎn)下的子級(jí)節(jié)點(diǎn)的節(jié)點(diǎn)名 和 頂層節(jié)點(diǎn)下的子級(jí)節(jié)點(diǎn)下的子級(jí)節(jié)點(diǎn)中屬性name的值.不要暈.看看輸出面板就會(huì)明白它們之間的關(guān)系了哦. trace(child_arr[i].childNodes[j].nodeName+":"+child_arr[i].childNodes[j].attributes.name); } } } else { trace("加載失敗!"); } };
實(shí)驗(yàn)3:
利用xml文檔數(shù)據(jù)做用戶登錄. 新建一個(gè)xml文檔.在記事本中輸入下面的代碼.然后保存為 xml-003.xml
<?xml version="1.0" encoding="gb2312"?> <!--xml-003.xml--> <UserDataList> <manager Post="經(jīng)理"> <UserData username="MChooseFlash01" password="MChooseHappiness" /> <UserData username="MChooseFlash02" password="MChooseHappiness" /> </manager> <Employee Post="職員"> <UserData username="EChooseFlash01" password="EChooseHappiness" /> <UserData username="EChooseFlash02" password="EChooseHappiness" /> </Employee> </UserDataList>
首先分析下結(jié)構(gòu):
<UserDataList>是頂層節(jié)點(diǎn). <manager Post="經(jīng)理">是頂層節(jié)點(diǎn)下的子級(jí)節(jié)點(diǎn).Post是manager節(jié)點(diǎn)的屬性. <Employee Post="職員">是頂層節(jié)點(diǎn)下的子級(jí)節(jié)點(diǎn).Post是Employee節(jié)點(diǎn)的屬性. <UserData username="MChooseFlash01" password="MChooseHappiness" /> 是頂層節(jié)點(diǎn)下的子級(jí)節(jié)點(diǎn)下的子級(jí)節(jié)點(diǎn).username和password是UserData節(jié)點(diǎn)的屬性.
這次也需要用到嵌套for.
- 打開Flash新建一個(gè)Flash文檔,大小為300*100,保存到剛才的xml文檔的目錄中,命名為 xml-03.fla
- 新建3個(gè)圖層分別命名Actions , cont , bg .
- bg層在第一幀畫三個(gè)文本框大小的虛線框.
- cont層在第一幀拉二個(gè)輸入文本框,實(shí)例名分別為username_txt和password_txt,再拉一個(gè)動(dòng)態(tài)文本框,實(shí)例名為status_txt.將這三個(gè)文本框?qū)R須虛線框.再點(diǎn)窗口->公用庫->按鈕.拉一個(gè)按鈕出來.實(shí)例名為login_btn.
如圖:
Actions層在第一幀中輸入以下代碼:
//xml-003.fla. //使用系統(tǒng)編碼.防止亂碼. System.useCodepage = true; //實(shí)例化一個(gè)xml對(duì)象. var myxml:XML = new XML(); //分析時(shí)忽略xml文檔中的空格. myxml.ignoreWhite = true; //加載xml-002.xml文檔. myxml.load("xml-003.xml"); //調(diào)用XML.onLoad事件. myxml.onLoad = function(success:Boolean) { //如果加載成功,success=true;否則success=false; if (success) { trace("加載成功!"); login_btn.onRelease = function() { //用一個(gè)數(shù)組來引用頂層節(jié)點(diǎn)中子級(jí)節(jié)點(diǎn)的數(shù)組. var child_arr:Array = myxml.firstChild.childNodes; //用UserData指定xml文檔節(jié)點(diǎn)的attributes對(duì)象. var UserData:Object; //這個(gè)for遍歷的是頂層節(jié)點(diǎn)下的子級(jí)節(jié)點(diǎn). for (var i = 0; i<child_arr.length; i++) { //這個(gè)for遍歷的是頂層節(jié)點(diǎn)下的子級(jí)節(jié)點(diǎn)下的子級(jí)節(jié)點(diǎn). for (var j = 0; j<child_arr[i].childNodes.length; j++) { //用UserData指定child_arr[i].childNodes[j].attributes對(duì)象 UserData = child_arr[i].childNodes[j].attributes; //判斷用戶名和密碼. //這里的UserData.username其實(shí)就是child_arr[i].childNodes[j].attributes.username的簡寫.UserData.password同理. //username和password是xml文檔節(jié)點(diǎn)中的屬性.因?yàn)閤ml和Flash區(qū)分大小寫.所以在輸入時(shí)要注意大小寫. if ((username_txt.text == UserData.username) && (password_txt.text == UserData.password)) { //Post這個(gè)是頂層節(jié)點(diǎn)下子級(jí)節(jié)點(diǎn)的Post屬性. status_txt.text = child_arr[i].attributes.Post+":"+UserData.username+"登錄成功"; //如果用戶名和密碼正確就退出for.這個(gè)重要.如果不用這個(gè),就會(huì)一直重復(fù)判斷用戶名和密碼.直到將xml文檔節(jié)點(diǎn)遍歷完.那樣就不是我們想要的.所以一有正確的就退出for; return; } else { status_txt.text = "用戶名或密碼錯(cuò)誤"; } } } }; } else { trace("加載失敗!"); } };
出處:藍(lán)色理想
責(zé)任編輯:moby
上一頁 Flash處理外部XML文檔數(shù)據(jù) [2] 下一頁 Flash處理外部XML文檔數(shù)據(jù) [4]
◎進(jìn)入論壇Flash專欄版塊參加討論
|