背景
我有一个基于计算机的培训项目,我需要为其构建一个标准化的包装器。课程页面将使用 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")
}
}
}