Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Actionscript 3-解析XML文件以加载资产_Xml_Actionscript 3_Flash - Fatal编程技术网

Actionscript 3-解析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

我对Flash中的文件加载相当陌生,虽然我已经习惯了C#对xml文件的序列化,但我完全不知道如何在Flash中实现这一点。我有两种类型的xml文件需要加载,我希望您能帮助我正确设置代码

让我们从第一个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>

真的
为了节省空间,我没有包括尽可能大的房间,但是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());
            }
        }
    }
}