AS3,加载多个XML文件?

时间:2012-04-19 16:50:42

标签: xml actionscript-3 flash oop

背景

我有一个基于计算机的培训项目,我需要为其构建一个标准化的包装器。课程的页面将使用XML创建。每个页面都有自己的XML文件;例如,第1页将加载来自1.xml的所有内容,而第2页将加载2.xml等等。页面数量总是不同,因为并非所有客户端都是相同的。

问题

我创建了十个要测试的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或客户端需要的任何其他内容,但它们的格式都相同)(另外,我不要< / strong>可以访问任何类型的数据库,因此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 **见下面的代码,我更新了它**

就像我说的,这是一个起点。需要解决很多问题,但我想确保我所走的路是正确的;)我不确定这个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")
    }
}
}   

1 个答案:

答案 0 :(得分:0)

这不是管理要加载的多个xml文件的正确方法。首先,您必须创建一个配置xml文件,该文件将包含将作为数据的一部分加载的xml文件列表,您需要先加载配置xml文件,然后根据需要启动内容xml文件配置xml文件。

您可以灵活配置xml文件名和计数。它可以工作任何情况下,不需要任何运行时间。无论何时您/您的客户想要更改,只需更改配置xml文件即可。它完成了。