2012-04-19 62 views
0

背景AS3,加載多個XML文件?

我有我需要建立一個標準化的包裝基於計算機的培訓項目。課程的頁面將使用XML創建。每個頁面都有它自己的XML文件;例如,第1頁將加載來自1.xml的所有內容,第2頁將爲2.xml等等。由於並非所有的客戶端都是相同的,因此頁面數量將始終不同。

問題

我已創建10個XML文件來進行測試,但對我的生活中,我無法弄清楚以下:

  • 使用Flash,算上XML文件的量該文件夾(我沒有訪問任何服務器端,如果我這樣做會改變一切)我想使用IOErrorEvent.IO_ERROR與某種類型的循環,但我不知道在哪裏開始使用Flash,負載
  • 將所有xml文件中的所有信息導入一個數組或矢量隨着用戶在課程中的進展而顯示在頁面上。用戶可以跳過課程,例如,他們可能想要跳過第5頁到第20頁或者之前的內容。所以一個對象或關聯數組是我的想法

我知道Flash無法訪問文件系統,但由於xml文件將被命名爲1.xml,2.xml,3.xml,4.xml,5。 XML等...(這個命名約定永遠不會改變,因爲XML文件將直接與頁面號相關),應該有一種方法可以做到這一點。我的想法是創建一些類型的循環來嘗試加載每個文件。一旦由於找不到文件而引發錯誤,我將跳出循環。以下是我的工作文件的視覺效果。

當前工作文件

我已經創建並開始工作,有資料很少,因爲我甚至不知道如何處理這種情況的文件。但是,這是我有:

XML文件(記住,可能有5個或100或任何其他客戶的需求,但他們都將被格式化相同)(另外,我DO NOT有訪問任何類型的數據庫,以便XML文件似乎是我最好的選擇)

<?xml version="1.0" encoding="iso-8859-1"?> 
<content> 
    <title>My First Page</title> 
    <body>This is the body of my new page I just built using XML</body> 
    <img>graphic.jpg</img> 
</content> 

XmlClass.as **見下面的代碼,Iv'e更新它**

就像我說的,這是一個起點。大量的事情需要解決,但我想確保我正在走下的道路是正確的;)我不確定這個XML想法是否是解決這個問題的最佳方法。我只是想,如果客戶端自己創建並維護這些xml文件,那麼我將需要一些工作量。

謝謝!

編輯

從我的答覆我的問題是寫得不好判斷。這裏是我一直在處理的XmlClass.as文件,這些文件的解釋可能比我上面做得更好。您可以在代碼中看到我創建了一個構建_loaderArray的方法,我可以在for循環中使用該方法將每個鏈接加載到xml文件。

所有我想要做的就是把x數量的XML文件,並創建一個數組或東西,這將允許我在一個地方有所有的XML文件。

XmlClass.as

package 
{ 
import flash.display.*; 
import flash.xml.*; 
import flash.events.*; 
import flash.net.*; 

public class XmlClass extends XMLDocument 
{  
    private var _xml:XML;  
    private var _loader:URLLoader; 
    private var _request:URLRequest; 
    private var _loaderArray:Array; /* this is to store my paths to each xml file */ 
    private var _xmlArray:Array; /* this is where I want to store all the information in all the xml files */ 
    private var _fileError:Boolean; /* this tells me that I have hit a 404 trying to load one of the files */ 

    public function XmlClass():void 
    { 
     BuildLoaderArray(); 
     BuildXmlArray(); 
    } 
    /* build the xml array so I can have one place that stores each of the xml files content */ 
    private function BuildXmlArray():void 
    { 
     _loader = new URLLoader(); 
     for(var i=1;i<_loaderArray.length;i++) 
     { 
      /* check to see if we have a 404 error and stop the loop */ 
      if(_fileError){break;} 
      _request = new URLRequest(_loaderArray[i]);/* load each of the xml paths to load into the array */ 
      _loader.addEventListener(Event.COMPLETE,ProcessXML); 
      _loader.addEventListener(IOErrorEvent.IO_ERROR,XMLioErrorHandler); 
      _loader.load(_request); 
     } 
     trace(_xmlArray);/* show me the newly created xml array that has all the files information */ 
    } 
    /* build all the links to the xml files for the loader */ 
    private function BuildLoaderArray():void 
    { 
     _loaderArray = new Array(); 
     for(var i=1;i<201;i++) 
     { 
      _loaderArray.push("../xml/"+i+".xml"); 
     } 
    } 
    private function ProcessXML(e:Event):void 
    { 
     _xmlArray = new Array(); 
     _xml = new XML(e.target.data); 
     _xmlArray.push(_xml); 
    }  
    private function XMLioErrorHandler(e:IOErrorEvent):void 
    { 
     _fileError = true; 
     trace("Loading Error") 
    } 
} 
} 
+0

使xml來配置您的項目。例如,它將有包含信息的節點,您將需要該頁面的相應xml的頁碼和URL。這樣,項目可以從xml動態配置。 – 2012-04-19 16:57:55

+0

@ The_asMan:我喜歡這個想法,並且在網絡上看到了類似的東西,但我頭腦中的想法是儘可能地使這種動態與我幾乎沒有互動。必須有一種方法可以在配置文件中執行此操作。如果我找不到解決方案,那麼您的想法將是我唯一的選擇。 – Mike 2012-04-19 17:02:20

+0

由於您無法訪問服務器端腳本,因此根本無法生成動態材質。 – 2012-04-19 18:02:38

回答

0

這不加載到管理多個XML文件正確的方法。首先,您必須創建一個配置xml文件,其中將包含將作爲數據的一部分加載的xml文件的列表,並且需要首先加載配置xml文件,然後在必須啓動內容xml文件之後配置xml文件。

你可以靈活地配置你的xml文件名和數量也。它將工作在任何情況下,並且不需要運行任何東西。每當你/你的客戶想更改時,只需更改配置xml文件即可。完成。