如何通过XML(?)在OpenFL(Haxe)中导出(保存)数据

如何通过XML(?)在OpenFL(Haxe)中导出(保存)数据,haxe,openfl,Haxe,Openfl,在AS3中,我可以写以下内容: fileReference = new FileReference(); var xmlStage:XML = new XML(<STAGE/>); var xmlObjects:XML = new XML(<OBJECTS/>); var j:uint; var scene:SomeScene = ((origin_ as SecurityButton).origin as SomeScene); var object:SomeObjec

在AS3中,我可以写以下内容:

fileReference = new FileReference();
var xmlStage:XML = new XML(<STAGE/>);
var xmlObjects:XML = new XML(<OBJECTS/>);
var j:uint;
var scene:SomeScene = ((origin_ as SecurityButton).origin as SomeScene);
var object:SomeObject;

for (j = 0; j < scene.objectArray.length; ++j) {
    object = scene.objectArray[j];
    if (1 == object.saveToXML){
        var item:String = "obj";
        var o:XML = new XML(<{item}/>);
        o.@x = scene.objectArray[j].x;
        o.@y = scene.objectArray[j].y;
        o.@n = scene.objectArray[j].name;
        o.@g = scene.objectArray[j].band;
        o.@f = scene.objectArray[j].frame;
        o.@w = scene.objectArray[j].width;
        o.@h = scene.objectArray[j].height;

        o.@s = scene.objectArray[j].sprite;
        o.@b = scene.objectArray[j].bodyType;
        xmlObjects.appendChild(o);
        //System.disposeXML(o);
    }
}

xmlStage.appendChild(xmlObjects);
fileReference.save(xmlStage, "XML.xml");
//System.disposeXML(xmlObjects);
//System.disposeXML(xmlStage);
//fileReference = null;
fileReference=newfilereference();
var xmlStage:XML=newxml();
var xmlObjects:XML=newxml();
var j:uint;
var scene:SomeScene=((原点作为SecurityButton)。原点作为SomeScene);
var对象:SomeObject;
对于(j=0;j
在Haxe中有没有一种等效的方法来实现这一点?(感兴趣的目标:HTML5

如果没有,我有什么选择

(下面的链接显示了AS3中该代码的导出结果)


对于flash目标和受支持的目标,您可以使用FileReference:

    var output = sys.io.File.write(path, true);
    output.writeString(data);
    output.flush();
    output.close();

您可以使用Xml类来创建Xml(参见示例:)

类测试{
静态函数main(){
var root=Xml.createElement('root');
var child=Xml.createElement('my-element');
set('attribute1','value1');//添加您自己对象的值
set('attribute2','value2');//可以添加更多的子级
root.addChild(child);
//这可能是一个文件写入,或发布到http,或套接字
跟踪(root.toString());//
}
}

该示例中的
root.toString()
可以序列化为一个文件,或者任何其他类型的输出(例如通过http发送到某处)。

您的Haxe目标是什么?HTML5是我的主要目标,而使用Haxe这正是我想要的,尽管,在HTML5导出中,我似乎无法让它充分发挥作用。我有一个响应鼠标点击的按钮,它应该通过安全沙盒检查(至少对于Flash),但是我想在我的计算机上保存XML文件的位置(fileReference.save(root.toString(),“SomeXML.XML”)(文件引用.save)的对话框没有弹出,现在离我很近,但我感觉很遥远。有什么想法吗?如果您正在运行html,那么您需要的是html5 Blob api,以及通过链接调用的url。看到这个JS提琴了吗:这可以在Haxe项目中使用吗?是的,您可以编写JS目标特定的代码。也许可以让你开始(也许对你也有用)
class Test {
    static function main() {
        var root = Xml.createElement('root');
        var child = Xml.createElement('my-element');
        child.set('attribute1', 'value1'); //add your own object's values
        child.set('attribute2', 'value2'); //may be add a few more children
        root.addChild(child);

        //this could be a file write, or POST'ed to http, or socket
        trace(root.toString()); // <root><my-element attribute1="value1" attribute2="value2"/></root>
    }
}