0

背景

我有一个基于计算机的培训项目,我需要为其构建一个标准化的包装器。课程页面将使用 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 个或任何其他客户端需要的文件,但它们的格式都相同)(另外,我无权访问任何类型的数据库,因此 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")
    }
}
}   
4

1 回答 1

0

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

您可以灵活地配置您的 xml 文件名和计数。它可以在任何情况下工作,并且不需要运行任何东西。每当您/您的客户想要更改时,只需更改配置 xml 文件。完成。

于 2012-05-03T10:38:37.403 回答