Actionscript 3-解析XML文件以加载资产
我对Flash中的文件加载相当陌生,虽然我已经习惯了C#对xml文件的序列化,但我完全不知道如何在Flash中实现这一点。我有两种类型的xml文件需要加载,我希望您能帮助我正确设置代码 让我们从第一个xml文件开始。它看起来像这样(后面将介绍更多的级别元素): 第二种类型的XML文件如下所示:Actionscript 3-解析XML文件以加载资产,xml,actionscript-3,flash,Xml,Actionscript 3,Flash,我对Flash中的文件加载相当陌生,虽然我已经习惯了C#对xml文件的序列化,但我完全不知道如何在Flash中实现这一点。我有两种类型的xml文件需要加载,我希望您能帮助我正确设置代码 让我们从第一个xml文件开始。它看起来像这样(后面将介绍更多的级别元素): 第二种类型的XML文件如下所示: <?xml version="1.0" encoding="utf-8"?> <Level xmlns:xsi="http://www.w3.org/2001/XMLSchema-ins
<?xml version="1.0" encoding="utf-8"?>
<Level xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<level>
<Room>
<tiles />
<IsEmpty>true</IsEmpty>
</Room>
</level>
</Level>
真的
为了节省空间,我没有包括尽可能大的房间,但是tiles节点可以包含多达100个“tiles”,每个“tiles”都有自己的数据集,并且在这个级别内可能有多达100个房间
我还没有编写加载该文件的代码,因为我不太了解如何加载上面发布的简单xml文件
如果有人愿意在Flash中解释这个过程是如何工作的,我也会非常感激 要加载xml文件,可以使用URLLoader将数据作为字符串加载,然后将其传递给xml构造函数 请注意,为了捕获格式错误的XML,在新XML周围放置try/catch通常是一个好主意
import flash.net.URLLoader;
import flash.net.URLRequest;
import flash.events.Event;
var urlLoader:URLLoader = new URLLoader(new URLRequest("LevelFilePaths.xml"));
urlLoader.addEventListener(Event.COMPLETE, dataLoadCompleteHandler);
function dataLoadCompleteHandler(event:Event) {
var urlLoader:URLLoader = URLLoader(event.currentTarget);
var xml:XML;
try {
// urlLoader.data contains the file contents as a String.
xml = new XML(urlLoader.data);
} catch (e:Error) {
trace("The xml was malformed.");
}
if (xml) {
trace("XML Loaded");
for each (var level in xml.level) {
for each (var room in level.Room) {
trace("Room: " + room.toXMLString());
trace("is empty: " + room.IsEmpty.text());
}
}
}
}
在flash中使用XML更容易。。。看看这个。。。我尝试了这个方法,但由于某种原因,在尝试加载文件时遇到了一个未处理的异常。错误如下:错误#2044:未处理的ioError:。text=错误#2032:流错误。URL:app:/levelfilepath.xml“levelfilepath.xml”是相对于应用程序的.xml文件名。是的,我知道。我将它更改为正确的文件路径,但它仍然崩溃。我还移动了该文件以使其成为正确的文件路径,但它仍然拒绝工作:/我能解决我的问题。无论出于何种原因,我使用的文件路径是错误的(即使类似的文件路径对于其他资产也可以正常工作)。谢谢
<?xml version="1.0" encoding="utf-8"?>
<Level xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<level>
<Room>
<tiles />
<IsEmpty>true</IsEmpty>
</Room>
</level>
</Level>
import flash.net.URLLoader;
import flash.net.URLRequest;
import flash.events.Event;
var urlLoader:URLLoader = new URLLoader(new URLRequest("LevelFilePaths.xml"));
urlLoader.addEventListener(Event.COMPLETE, dataLoadCompleteHandler);
function dataLoadCompleteHandler(event:Event) {
var urlLoader:URLLoader = URLLoader(event.currentTarget);
var xml:XML;
try {
// urlLoader.data contains the file contents as a String.
xml = new XML(urlLoader.data);
} catch (e:Error) {
trace("The xml was malformed.");
}
if (xml) {
trace("XML Loaded");
for each (var level in xml.level) {
for each (var room in level.Room) {
trace("Room: " + room.toXMLString());
trace("is empty: " + room.IsEmpty.text());
}
}
}
}