Actionscript 3 - 解析XML文件以加载资产

时间:2014-02-15 15:15:59

标签: xml actionscript-3 flash

我在Flash中加载文件相当新,虽然我已经习惯了C#的xml文件序列化的简易性和舒适性,但我完全迷失了我需要在Flash中处理它的方法。我有两种类型的xml文件需要加载,我希望你能帮我正确设置我的代码!

让我们从第一个xml文件开始。它看起来像这样(稍后会有更多的Level元素):

<?xml version="1.0" encoding="utf-8"?>
<Root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Level>
    <filepath>../Assets/Level.xml</filepath>
  </Level>
</Root>

加载它的代码低于

public function loadLevelFilePaths():void
{
    trace("Loading XML");
    var XMLData:XML = new XML(new URLRequest("../Assets/LevelFilePaths.xml"));

    for each (var node:XML in XMLData.Level)
    {
        levelFilePaths.push(node.filepath.text());
        trace("Level " + levelFilePaths[levelFilePaths.length - 1] + " loaded!");
    }
}

第二种类型的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>

为了空间,我没有包含尽可能大的空间,但是tile节点最多可以包含大约100个“Tiles”,每个都有自己的数据集,并且最多可以有100个房间。水平。

我还没有编写代码来加载它,因为我不太明白如何加载我上面发布的简单xml文件。

如果有人愿意解释这个过程在Flash中是如何运作的,我也将不胜感激!

1 个答案:

答案 0 :(得分:1)

要加载xml文件,可以使用URLLoader将数据作为String加载,然后将其传递给XML构造函数。

请注意,为了捕获格式错误的xml,将try / catch放在新XML上通常是一个好主意。

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());
            }
        }
    }
}