2012-04-19 60 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文件即可。完成。