2017-07-31 48 views
2

在AS3中我可以写下面的(?):如何OpenFL(HAXE)通过XML导出(保存)数据

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}/>); 
     [email protected] = scene.objectArray[j].x; 
     [email protected] = scene.objectArray[j].y; 
     [email protected] = scene.objectArray[j].name; 
     [email protected] = scene.objectArray[j].band; 
     [email protected] = scene.objectArray[j].frame; 
     [email protected] = scene.objectArray[j].width; 
     [email protected] = scene.objectArray[j].height; 

     [email protected] = scene.objectArray[j].sprite; 
     [email protected] = 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; 

有同等方式HAXE做到这一点? (感兴趣的目标:HTML5

如果不是,我的选择是什么?

(此代码AS3的输出结果显示在下面这个链接)

https://pastebin.com/raw/5twiJ01B

+0

你的Haxe目标是什么? – Confidant

+0

HTML5是我使用Haxe时的主要目标 –

回答

1

你可以使用的FileReference闪存目标,并sys.ioFile为支持的目标:

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

您可以使用Xml类创建xml(请参阅示例:https://try.haxe.org/#68cfF

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> 
    } 
} 

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

+0

这正是我所期待的,尽管我似乎无法在HTML5导出中充分发挥其作用。我有一个响应鼠标点击的按钮,该按钮应该通过安全沙箱检查(至少对于Flash),但是对话框不会弹出我想将XML文件保存在计算机上的位置( fileReference.save(root.toString(),“SomeXML.xml”)),现在已经很近了,但我感觉如此遥远。有任何想法吗? –

+0

如果您正在运行html,那么您要查找的是html5 Blob api,并通过链接调用url。看到这个JS小提琴:https://jsfiddle.net/dvuyka/z8ouj1np/ – Chii

+0

这可以在Haxe项目中使用吗? –