将Google Scripts中的XML解析为google工作表

时间:2018-05-01 14:33:21

标签: javascript xml parsing google-apps-script

我正在尝试通过服务器API从服务器导入数据,这需要登录。

使用有关此问题的信息:Cheers MogsDad

我可以成功获取外部xml文件,并在记录器中显示数据。

我不能为我的生活写任何信息或元素到我的电子表格。在链接共享中,@ mogsdad已链接到解析XML站点。不幸的是,链接已经死了。当前代码返回XML文件。通常我会尝试使用importxml公式,但没有太多运气。 已经取消了我的编码尝试来解析XML,因此代码看起来不太糟糕

有没有人知道如何解析部分文件或知道XML解析文档的工作URL?

到目前为止,这是我的代码。提前致谢

    function importFromXml(){
  var url = 'URL HERE'; // Advance search for macs not encrypted.
  var username = 'USER HERE';
  var password = 'PASSWORD HERE';

  var headers =
  {
    Authorization : "Basic " + Utilities.base64Encode(username+':'+password)
  }

  var options =
  {
    "method" : "get",
    "headers": headers
  };

   var headers =
  {
    Authorization : "Basic " + Utilities.base64Encode(username+':'+password)
  }

  var options =
  {
    "method" : "get",
    "headers": headers
  };

  // Getting "bad request" here - check the username & password
  var result = UrlFetchApp.fetch(url, options);
  var state=result.getContentText(); 

  // You should check state.getResponseCode()

  Logger.log('1: '+state);
  Logger.log(parse(state));
}

function parse(txt) {
  var doc = Xml.parse(txt, true);
  return doc;                            // Return results
}

****编辑****

经过多一些游戏,我有了一些进步。

    var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("NoFirevault");
var range = ss.getRange(1, 1);

range.setValue(state);

我设法将XML内容写入我的工作表。虽然在一个牢房里。当我尝试将数据拆分为单元格时,使用数据长度并使用setValues。它让我筋疲力尽,继续玩。

****编辑*****

经过多一点玩耍后再玩。我可以将XML数据写入工作表。 共有31个条目,具有各种属性。但是这些都会被写入每个条目的单个单元格。

这是对进入单个单元格的所有31个条目的改进。

如果它有帮助,这是我正在看的XML布局。 我想要计算机部分中的计算机数据。

XML Structure

function importFromJamf(){
  var url = 'URL HERE'; // Advance search for macs not encrypted.
  var username = 'USER HERE';
  var password = 'Password';

  var headers =
  {
    Authorization : "Basic " + Utilities.base64Encode(username+':'+password)
  }

  var options =
  {
    "method" : "get",
    "headers": headers
  };

   var headers =
  {
    Authorization : "Basic " + Utilities.base64Encode(username+':'+password)
  }

  var options =
  {
    "method" : "get",
    "headers": headers
  };


  var result = UrlFetchApp.fetch(url, options);
  var state = result.getContentText(); 



var document = XmlService.parse(state);





 var entries = document.getRootElement().getChild('computers').getChildren(); // Working but values joined into one row




for (i=0;i<entries.length;i++){



var value = entries[i].getValue();


SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet2").getRange(i+1,1).setValue(value);

}





}

1 个答案:

答案 0 :(得分:0)

function importFromJamf(){
  var url = 'url'; 
  var username = 'user';
  var password = 'pw';

  var headers =
  {
    Authorization : "Basic " + Utilities.base64Encode(username+':'+password)
  }

  var options =
  {
    "method" : "get",
    "headers": headers
  };




  var result = UrlFetchApp.fetch(url, options);
  var state = result.getContentText(); 



   var document = XmlService.parse(state);



var array= [];




  var entries = document.getRootElement().getChild('computers').getChildren('computer');


  for(i = 0 ; i < entries.length ; i++){


var a = entries[i].getContent(5).getValue();
var b = entries[i].getContent(8).getValue();
var c = entries[i].getContent(9).getValue();
var d = entries[i].getContent(6).getValue();
var e = entries[i].getContent(11).getValue();
var f = entries[i].getContent(12).getValue();
var g = entries[i].getContent(10).getValue();

var data = [a,b, c,d,e, f,g];
array.push(data);

  }

  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName("Sheet1");
  sheet.getRange("A2:Z").clearContent();
  var range = sheet.getRange(2,1,array.length, array[0].length);
  range.setValues(array);
}

上面的代码适用于我需要的东西,它允许我将我想要的值抓取到可用于写入工作表的数组中。

.getContent()帮助我获取每个循环的y列数组的值

但我确信有更好的方法可以解决这个问题。