【发布时间】:2020-02-07 08:09:50
【问题描述】:
这是我第一次使用 XML,我的技术并不高,但我试图了解编程以使我的工作更轻松。我正在使用 Google App 脚本,发现它在传递通过 API 获得的 XML 数据时遇到了挑战。
我需要获取这些数据,以便我可以使用谷歌应用脚本将特定值设置为谷歌表格。
我不确定如何迭代/循环遍历元素以获取每个人的数据,然后将其设置为 google sheet。
这是迄今为止我编写的代码。当我登录说第一个名字时,我只得到一个名字而不是系统中的大约 50 个名字。这里的任何帮助将不胜感激。
ak ='key'
start = '2019-01-01'
end = '2019-12-31'
function getData() {
var options = {
method: 'get',
headers: {
Authorization: 'Bearer ' + ak
}
};
var url = 'https://data.purelyhr.com/daily?ak='+ ak + '&sDate=' + start + '&eDate=' + end + '&TimeOffTypeName';
var response = UrlFetchApp.fetch(url).getContentText();
var document = XmlService.parse(response);
var root = document.getRootElement();
//set variables to data from PurelyHR
var TimeOffDate = root.getChild('Request').getChild('TimeOffDate').getText();
var TimeOffDayOfWeek = root.getChild('Request').getChild('TimeOffDayOfWeek').getText();
var TimeStart = root.getChild('Request').getChild('TimeStart').getText();
var TimeEnd = root.getChild('Request').getChild('TimeEnd').getText();
var TimeOffHours = root.getChild('Request').getChild('TimeOffHours').getText();
var TimeOffTypeName = root.getChild('Request').getChild('TimeOffTypeName').getText();
var LoginID= root.getChild('Request').getChild('LoginID').getText();
var Firstname = root.getChild('Request').getChild('Firstname').getText();
var Lastname = root.getChild('Request').getChild('Lastname').getText();
var UserCategory = root.getChild('Request').getChild('UserCategory').getText();
var SubmittedDate = root.getChild('Request').getChild('SubmittedDate').getText();
var Deducted = root.getChild('Request').getChild('Deducted').getText();
var Comment = root.getChild('Request').getChild('Comment').getText();
//populate the sheet with variable data
Logger.log(response)
}
示例响应
<?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>
<Request ID="126292" Status="Approved">
<TimeOffDate>2020-02-07</TimeOffDate>
<TimeOffDayOfWeek>Friday</TimeOffDayOfWeek>
<TimeStart></TimeStart>
<TimeEnd></TimeEnd>
<TimeOffHours>8.000</TimeOffHours>
<TimeOffTypeName>Annual Vacation</TimeOffTypeName>
<LoginID>usertwo</LoginID>
<Firstname>user</Firstname>
<Lastname>two</Lastname>
<UserCategory></UserCategory>
<SubmittedDate>2019-10-15</SubmittedDate>
<Deducted>Yes</Deducted>
<Comment>
<![CDATA[Neil (as my mentor)]]>
</Comment>
</Request>
【问题讨论】:
-
我认为当你的脚本中
response的样本值作为文本值提供时,它会帮助用户思考解决方案。当然,请删除您的个人信息。还有,你能提供你期望的输出值吗? -
@Tanaike 感谢您花时间查看代码。我已对其进行了编辑以包含示例响应。我需要的预期输出数据应该是响应中的所有子对象(即 TimeOffDate、LoginID 等)。我希望这有助于澄清?
-
您现在提供了屏幕截图,但如果有人想帮助您,他需要手动输入 XML。如果您可以在问题中将其作为文本提供,我们可以简单地将其复制并开始测试代码。
-
@Casper,感谢您的推荐。问题现已编辑。
-
感谢您的回复。我注意到你的问题已经解决了。很高兴您的问题得到解决。
标签: javascript xml for-loop google-apps-script google-sheets