0

Stencyl というプログラムで Haxe にコードを書き込もうとしています。Web サーバーから返される XML 応答ですべての日付を取得し、それらに変数を割り当てようとしています。基本的な XML 応答を取得し、Fast 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)
{}}
4

1 に答える 1