【问题标题】:SyntaxError: Unexpected identifier while Parsin XML Data Using Google App ScriptSyntaxError:使用 Google 应用脚本解析 XML 数据时出现意外标识符
【发布时间】:2020-02-17 13:58:50
【问题描述】:

所以我通过 API 从休假系统获取休假数据并将其发布到谷歌表格,下面是示例响应 xml 响应。

<?xml version='1.0' encoding='ISO-8859-1'?>
<DataService>
    <Request ID="1253" Status="Approved">
        <TimeOffDate>2020-02-07</TimeOffDate>
        <TimeOffDayOfWeek>Friday</TimeOffDayOfWeek>
        <TimeStart></TimeStart>
        <TimeEnd></TimeEnd>
        <TimeOffHours>8.000</TimeOffHours>
        <TimeOffTypeName>Annual Vacation</TimeOffTypeName>
        <LoginID>testuser</LoginID>
        <Firstname>test</Firstname>
        <Lastname>user</Lastname>
        <UserCategory></UserCategory>
        <SubmittedDate>2019-10-03</SubmittedDate>
        <Deducted>Yes</Deducted>
        <Comment>
            <![CDATA[* time-off request created by administrator]]>
        </Comment>
    </Request>

以下是我用来获取数据并将其设置到 Google 表格的代码。我的挑战是,我不确定如何从响应中获取属性 IDStatus 并将其推送到 requestObjects 数组。每次我尝试使用 request.getAttribute("ID") 推送属性时,都会出现错误
SyntaxError: 意外的标识符

       };
  var url = 'https://data.purelyhr.com/xml?ak=' + ak + '&sDate=' + start + '&eDate=' + end + '&TimeOffTypeName'+ '&page=' + pages;
  var response = UrlFetchApp.fetch(url).getContentText();
  var document = XmlService.parse(response);
  var root = document.getRootElement();

  //set variables to data from PurelyHR
  var requestElements = root.getChildren('Request'); // Get all <Request> elements
  var requestObjects = []; // Request objects for logging / eventual printing
  for (var i = 0; i < requestElements.length; i++) {
  var request = requestElements[i]; // A single <Request> element
  var Status = request.getAttribute("Status").getValue();

    // Add to requestObjects array
    requestObjects.push({
      Status:request.getAttribute("Status"),
      TimeOffDate: request.getChild('TimeOffDate').getText(),
      TimeOffDayOfWeek: request.getChild('TimeOffDayOfWeek').getText(),
      TimeStart: request.getChild('TimeStart').getText(),
      TimeEnd: request.getChild('TimeEnd').getText(),
      TimeOffHours: request.getChild('TimeOffHours').getText(),
      TimeOffTypeName: request.getChild('TimeOffTypeName').getText(),
      LoginID: request.getChild('LoginID').getText(),
      Firstname: request.getChild('Firstname').getText(),
      Lastname: request.getChild('Lastname').getText(),
      UserCategory: request.getChild('UserCategory').getText(),
      SubmittedDate: request.getChild('SubmittedDate').getText(),
      Deducted: request.getChild('Deducted').getText(),
      Comment: request.getChild('Comment').getText()
    });
  }
 var ss = SpreadsheetApp.getActiveSpreadsheet();
 var sheet = ss.getActiveSheet();
 var range = sheet.getRange("A2:J").getValue();
 for (var j = 0; j < requestObjects.length; j++) {
        sheet.getRange(2 + j, 1).setValue(requestObjects[j].Status)
        sheet.getRange(2 + j, 2).setValue(requestObjects[j].Firstname)
        sheet.getRange(2 + j, 3).setValue(requestObjects[j].Lastname)
        sheet.getRange(2 + j, 4).setValue(requestObjects[j].LoginID);
        sheet.getRange(2 + j, 5).setValue(requestObjects[j].TimeOffTypeName);
        sheet.getRange(2 + j, 6).setValue(requestObjects[j].TimeOffDayOfWeek);
        sheet.getRange(2 + j, 7).setValue(requestObjects[j].SubmittedDate);
        sheet.getRange(2 + j, 8).setValue(requestObjects[j].TimeOffHours)
        sheet.getRange(2 + j, 9).setValue(requestObjects[j].TimeOffDate)
  Logger.log(JSON.stringify(requestObjects));
}

}

G表上的结果

【问题讨论】:

  • 对象的 ID 和 Status 字段没有属性名称。
  • @只是我无法复制这个。正如 Pointy 所写,这可能是其中一个 元素没有 ID 或 Status 属性。
  • 我能问一下您期望的结果吗?
  • @Tanaike,我的意图是将状态作为字符串,即 ApprovedCancelled,但得到的是 [ Status='Approved'] 而不是我想要的
  • @Tanaike,非常感谢。我修改并且它工作。顺便说一句,你对我的理解是正确的。

标签: javascript arrays xml google-apps-script google-sheets


【解决方案1】:

当您在 Element 实例上调用 getAttribute() 函数时,它会返回 Attribute 类的实例。然后,您需要在该 Attribute 实例上调用 getValue()。例如:

var id = request.getAttribute("ID").getValue();

请注意,返回的值始终是 String 类型。

【讨论】:

  • 感谢您查看此内容。我已经按照我编辑的代码中的说明完成了这项工作,我在 G 表中得到的内容似乎很奇怪。请查看已编辑的问题。谢谢
  • @Just 不要只是复制粘贴示例代码;尝试了解其背后的逻辑,然后将其应用于您的用例。查看你的代码,看看你应该在哪里调用getValue() 方法(提示......你在哪里调用getAttribute() 函数)。
猜你喜欢
  • 2019-04-28
  • 2019-10-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-25
  • 1970-01-01
相关资源
最近更新 更多