2017-12-19 16 views
1

また、私はスクリプトエディタを使用することにより、グーグルスプレッドシートではJavaScriptを使用してXMLデータのプルを実装する必要が私のrecent taskは、GoogleスプレッドシートでXmlServiceを使用して値を取得

の種類のフォローアップ質問です。私は遠隔に格納されたXMLファイルから特定の値を抽出しようとしています。構造体は固定されており、時々値が変更されるだけなので、コードは静的(インデックス?)にすることができます。

次のようにXMLが見えます:

<?xml version='1.0' encoding='UTF-8'?> 
<response xmlns="http://www.xovis.com/sensor-api/v2"> 
    <sensor-time timezone="Europe/Berlin">2017-12-18T17:00:02+01:00</sensor-time> 
    <status> 
    <code>OK</code> 
    </status> 
    <content> 
    <elements> 
     <element> 
     <element-id>0</element-id> 
     <element-name>count/element-name> 
     <sensor-type>somesensor</sensor-type> 
     <data-type>LINE</data-type> 
     <from>2017-10-29T16:00:00+01:00</from> 
     <to>2017-10-29T17:00:00+01:00</to> 
     <resolution>ONE_HOUR</resolution> 
     <measurements> 
      <measurement> 
      <from>2017-10-29T16:00:00+01:00</from> 
      <to>2017-10-29T17:00:00+01:00</to> 
      <values> 
       <value label="fw">145</value> 
       <value label="bw">1</value> 
      </values> 
      </measurement> 
     </measurements> 
     </element> 
    </elements> 
    </content> 
    <sensor-info> 
    <serial-number>D5:88:63:98:AA:E2</serial-number> 
    <ip-address>192.168.1.99</ip-address> 
    <name>somename</name> 
    <group></group> 
    <device-type>XYZ</device-type> 
    </sensor-info> 
</response> 

私が今直面してる問題は、私は私が考える値145と1を取得するためのレベルでより深くを掘る方法には、作業のアイデアを持っていないということです私は属性fw/bwを利用しなければならない。

Cannot find method getChild(). (line 53, file "Code")

function xmlRead(){ 

    var url = 'SOMEURL'; 
    var responseXML = UrlFetchApp.fetch(url).getContentText(); 

    var outputDocument = XmlService.parse(responseXML); 
    var ns = XmlService.getNamespace("http://www.xovis.com/sensor-api/v2"); 

    var out = outputDocument.getRootElement().getChildren()[2].getChildren(); 

    var fw = out.getChild(); 

    Logger.log(out); 


} 

答えて

2

あなたが特定のチャイルズを選択することにより、XMLにドリルダウンすることができますエラーを返し

  <value label="fw">145</value> 
      <value label="bw">1</value> 

これまでの私のコード、。 以下の例では、elementmeasurementの複数のノードがあると仮定して、動的にしました。

これは速やかに行われ、テストされていません。いくつかのタイプミスがあるかもしれませんが、メカニズムは明らかに私が思うはずです。 reference guideを必ず確認してください。

var xml = '<?xml version=\'1.0\' encoding=\'UTF-8\'?><response xmlns="http://www.xovis.com/sensor-api/v2"><sensor-time timezone="Europe/Berlin">2017-12-18T17:00:02+01:00</sensor-time><status><code>OK</code></status><content><elements><element><element-id>0</element-id><element-name>count</element-name><sensor-type>somesensor</sensor-type><data-type>LINE</data-type><from>2017-10-29T16:00:00+01:00</from><to>2017-10-29T17:00:00+01:00</to><resolution>ONE_HOUR</resolution><measurements><measurement><from>2017-10-29T16:00:00+01:00</from><to>2017-10-29T17:00:00+01:00</to><values><value label="fw">145</value><value label="bw">1</value></values></measurement></measurements></element></elements></content><sensor-info><serial-number>D5:88:63:98:AA:E2</serial-number><ip-address>192.168.1.99</ip-address><name>somename</name><group></group><device-type>XYZ</device-type></sensor-info></response>'; 

function myFunction() { 
    var outputDocument = XmlService.parse(xml); 
    var ns = XmlService.getNamespace("http://www.xovis.com/sensor-api/v2"); 
    var content = outputDocument.getRootElement().getChild('content', ns); 
    var elements = content.getChild('elements', ns).getChildren('element', ns); 

    for (var i = 0; i < elements.length; i++) { // Loop over each element 
     Logger.log('Element ID: '+elements[i].getChild('element-id', ns).getText()); 
     var measurements = elements[i].getChild('measurements', ns).getChildren('measurement', ns); 
     for (var j = 0; j < measurements.length; j++) { // Loop over each measurement 
      Logger.log('Measurement from: '+measurements[j].getChild('from', ns).getText()) 
      var values = measurements[j].getChild('values', ns).getChildren('value', ns); 
      for (var k = 0; k < values.length; k++) { // loop over each value 
       Logger.log('Value: '+values[k].getText()) 
      } 
     } 
    } 
} 
+1

おかげで、それはあなたのコードを使用するときに前と同じエラーを返して: はTypeError:メソッドを呼び出すことはできませんヌルの「でGetChild」。 (行68、ファイル "コード") デバッグモードを実行するとvarコンテンツもnullです –

+0

'outputDocument.getRootElement()'をデバッグするとどうなりますか? – Casper

+0

[17-12-19 14:26:13:171 CET] null –

関連する問題