我正在尝试在名为 Stencyl 的程序中用 Haxe 编写代码。我试图从 Web 服务器返回 XML 响应中获取所有日期,并为它们分配变量。我已经获得了基本的 XML 响应,并且能够使用快速 XML 调用,但不知道如何将所有数据定义为要在程序中使用的变量。标签的数量可能会因调用而异。这是我到目前为止但不知道如何将整个文档解析为变量的内容。下面也是示例 XML 数据。任何帮助都是极好的!
// parse some xml data
var xml = Xml.parse(_vMixData).firstElement();
// wrap the xml for fast access
var fast = new haxe.xml.Fast(xml.firstElement());
// access the "inputs" child, which is wrapped with haxe.xml.Fast too
var inputs = fast.node.inputs;
一些示例 XML 代码
<vmix>
<version>14.0.0.52</version>
<inputs>
<input key="7715f2db-bdfd-4a7b-ab50-206dd26411cf" number="1" type="Video" title="Dord..mp4" state="Paused" position="0" duration="776214" loop="False" muted="False" volume="100" solo="False" audiobusses="M">Dord..mp4</input><input key="e5362e83-84e3-4b12-84c0-c18dad12570d" number="2" type="Blank" title="Blank" state="Paused" position="0" duration="0" loop="False">Blank</input>
</inputs>
<overlays>
<overlay number="1">Input.mp4</overlay>
<overlay number="2" />
<overlay number="3" />
<overlay number="4" />
<overlay number="5" />
<overlay number="6" />
</overlays>
<preview>2</preview>
<active>1</active>
<fadeToBlack>False</fadeToBlack>
<transitions>
<transition number="1" effect="Zoom" duration="500" />
<transition number="2" effect="Wipe" duration="500" />
<transition number="3" effect="Fly" duration="500" />
<transition number="4" effect="Zoom" duration="1000" />
</transitions>
<recording>False</recording>
<external>False</external>
<streaming>False</streaming>
<playList>False</playList>
<multiCorder>False</multiCorder>
<audio>
<master volume="100" muted="False" headphonesVolume="100" />
</audio>
</vmix>
这是完整的代码,它现在不打印 vMixData 在我更改它之前的位置。
{
public var _Prog1:Actor;
public var _vMixData:String;
public var _inputvar:String;
public function new(dummy:Int, engine:Engine)
{
super(engine);
nameMap.set("Prog 1", "_Prog1");
nameMap.set("vMixData", "_vMixData");
_vMixData = "";
nameMap.set("inputvar", "_inputvar");
_inputvar = "";
}
override public function init()
{
/* ======================= Every N seconds ======================== */
runPeriodically(1000 * 1, function(timeTask:TimedTask):Void
{
if (wrapper.enabled)
{
visitURL("http://127.0.0.1:8088/api?/Function=", function(event:Event):Void
{
_vMixData = cast(event.target, URLLoader).data;
propertyChanged("_vMixData", _vMixData);
});
var xml = Xml.parse(_vMixData);
// wrap the xml for fast access
var fast = new haxe.xml.Fast(xml.firstElement());
// access the "inputs" child, which is wrapped with haxe.xml.Fast too
var input = fast.node.input;
for (input in fast.node.input)
{
//Checking for and accessing attributes.
if (input.has.key)
trace("Input key : " + input.att.key);
//Accessing contents of a node
trace("Contents of input node : " + input.innerHTML);
}
trace("" + _vMixData);
}
}, null);
}
override public function forwardMessage(msg:String)
{}}