0

私はプロジェクトに取り組んでおり、制限を考慮して苦労しています。私は通常、この種のことを PHP で処理しますが、プロジェクトは限られたサーバー上で実行する必要があり、これを完全に JavaScript で行う必要があります。

スクリプトは次のとおりです。

1 - XML ファイル 1 をロードし、「実行中」に等しい playState 子を持つノードの「id」を見つけます (1 つだけあります)。

2 - ID を使用して XML ファイル 2 を読み込み、ステップ 1 の値と一致する ID を持つタイムラインの名前を返します。

jqueryセレクターを使用してみましたが、実際に特定の値を検索して返す方法を理解できません。どんな助けでも大歓迎です。

XML ファイル 1:

<response>
  <timelineStatus id = "1">
    <playState>Idle</playState>
    <position>P00H00M00.00S</position>
    <onStage>false</onStage>
  </timelineStatus>
  <timelineStatus id = "101">
    <playState>Idle</playState>
    <position>P00H00M00.00S</position>
    <onStage>false</onStage>
  </timelineStatus>
  <timelineStatus id = "102">
    <playState>Running</playState>
    <position>P00H00M00.00S</position>
    <onStage>false</onStage>
  </timelineStatus>
  <timelineStatus id = "103">
    <playState>Idle</playState>
    <position>P00H00M00.00S</position>
    <onStage>false</onStage>
  </timelineStatus>
  <timelineStatus id = "104">
    <playState>Idle</playState>
    <position>P00H00M00.00S</position>
    <onStage>false</onStage>
  </timelineStatus>
......

XML ファイル 2:

<response>
  <timeline id = "1">
    <name>System - Custom Color Base</name>
    <length>P00H00M10.00S</length>
    <timeSource>
      <type>Internal</type>
    </timeSource>
    <timeOffset>P00H00M00.00S</timeOffset>
  </timeline>
  <timeline id = "101">
    <name>Preset - Red</name>
    <length>P00H00M00.00S</length>
    <timeSource>
      <type>Internal</type>
    </timeSource>
    <timeOffset>P00H00M00.00S</timeOffset>
  </timeline>
  <timeline id = "102">
    <name>Preset - Green</name>
    <length>P00H00M00.00S</length>
    <timeSource>
      <type>Internal</type>
    </timeSource>
    <timeOffset>P00H00M00.00S</timeOffset>
  </timeline>
  <timeline id = "103">
    <name>Preset - Blue</name>
    <length>P00H00M00.00S</length>
    <timeSource>
      <type>Internal</type>
    </timeSource>
    <timeOffset>P00H00M00.00S</timeOffset>
  </timeline>
  <timeline id = "104">
    <name>Preset - Magenta</name>
    <length>P00H00M00.00S</length>
    <timeSource>
      <type>Internal</type>
    </timeSource>
    <timeOffset>P00H00M00.00S</timeOffset>
  </timeline>
......
4

1 に答える 1

0

JavaScript を使用したソリューションの詳細は次のとおりです。

xml1.xml

上に示したように

xml2.xml

上に示したように

解決:

<html>
    <head>
        <script>
            function getOutput(){
                var xhr1 = new XMLHttpRequest();
                xhr1.open("GET", "xml1.xml", false);
                xhr1.send(null);
                xml1 = (xhr1.responseXML);

                var xPathRes = xml1.evaluate("//timelineStatus/playState", xml1, null, XPathResult.ORDERED_NODE_ITERATOR_TYPE , null);
                result = new Array();
                var res = xPathRes.iterateNext();

                while (res) {                   
                    var playState = res.textContent;
                    if(playState == "Running")
                    {
                        resParentNode = res.parentNode;
                        var timelinstStatusId = resParentNode.getAttribute("id"); //id="102"

                        var xhr2 = new XMLHttpRequest();
                        xhr2.open("GET", "xml2.xml", false);
                        xhr2.send(null);
                        xml2 = (xhr2.responseXML);
                        console.log(xml2);

                        var xPathRes2 = xml2.evaluate("//timeline[@id='"+timelinstStatusId+"']/name", xml2, null, XPathResult.FIRST_ORDERED_NODE_TYPE , null);
                        result = xPathRes2.singleNodeValue;
                                            console.log(result.textContent); //Preset - Green
                        return result.textContent; //Preset - Green
                        break;
                    }
                    //Iterate through set of Results
                    res = xPathRes.iterateNext();
                }
            }
        </script>
    </head>
<body>
    <a href="javascript:void(0);" onclick="getOutput();">getOutput</a>
</body>
</html>
于 2013-05-15T08:28:22.543 に答える