SyntaxError: неожиданный идентификатор при данных Parsin XML с использованием скрипта Google App - PullRequest
0 голосов
/ 17 февраля 2020

Итак, я получаю данные об отпуске из системы Leave через API и публикую их на листе Google, а ниже приведен пример ответа 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. Моя проблема в том, что я не уверен, как получить атрибут ID и Status из ответа и pu sh в массив requestObjects. каждый раз, когда я пытаюсь извлечь атрибут sh, используя 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 лист

enter image description here

1 Ответ

1 голос
/ 17 февраля 2020

Когда вы вызываете функцию getAttribute() для экземпляра Element, он возвращает экземпляр класса Attribute. Затем вам нужно вызвать getValue() на этом Attribute экземпляре. Например:

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

Обратите внимание, что возвращаемое значение всегда имеет тип String.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...