3

我想将从 UrlFetch 获得的数据解析到电子表格中,但我得到的只是未定义的,有人可以告诉我我做错了什么

xml 位于地址https://dl.dropbox.com/u/11787731/Minecraft/bans.xml

function runevery15mins() {
 var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("MC Bans");
 sheet.clearContents();
 var banURL = "https://dl.dropbox.com/u/11787731/Minecraft/bans.xml";

 var banXML = UrlFetchApp.fetch(banURL).getContentText();
 var banDOC = Xml.parse(banXML, false);
 var mcuser = banDOC.bans;

 var x = 0;
 for(var c=0; c>mcuser.length;c++){
   var name = mcuser.getElement("username")[c].getText();
   var date = mcuser.getElement("date")[c].getText();
   var reason = mcuser.getElement("reason")[c].getText();
   var duration = mcuser.getElement("duration")[c].getText();



 } 
 sheet.appendRow([name, date, reason, duration]);
}
4

2 回答 2

3

您的代码中有一些小错误。

例如,for 循环中的第二个参数需要是c<mcuser.length.

使用 Xml 服务文档,这对我有用

function runevery15mins() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("MC Bans");
  sheet.clearContents();
  var banURL = "https://dl.dropbox.com/u/11787731/Minecraft/bans.xml";

  var banXML = UrlFetchApp.fetch(banURL).getContentText();
  var banDOC = Xml.parse(banXML, false);
  // Get all the child nodes from the document element that are 'user' nodes
  var mcusers = banDOC.getElement().getElements('user');

  for(var c=0; c<mcusers.length;c++){
    var user = mcusers[c];
    var name = user.getElement('username').getText();
    var date = user.getElement('date').getText();
    var reason = user.getElement('reason').getText();
    var duration = user.getElement('duration').getText();

    sheet.appendRow([name, date, reason, duration]);
 } 
}

请注意,例如,该sheet.appendRow行位于循环内部,而不是您之前的外部。我还删除了 X 变量,因为我没有看到它有任何用途。

我还创建了一个user变量,它是一个 XmlElement,以便更容易理解如何获取每个节点的不同内容。

于 2012-06-21T03:58:34.950 回答
1

你快到了。

看起来您需要深入研究另一个数组。此外,您对电子表格的回调应该在循环中。尝试这个:

...
var mcuser = banDOC.bans.user;

for(var i in mcuser){
   var name = mcuser[i].getElement("username").getText();
   var date = mcuser[i].getElement("date").getText();
   var reason = mcuser[i].getElement("reason").getText();
   var duration = mcuser[i].getElement("duration").getText();
   sheet.appendRow([name, date, reason, duration])
 } 
于 2012-06-22T13:06:32.583 回答