循环期间Google表格脚本空错误

时间:2016-09-17 03:00:43

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

我使用以下循环和Google Scripts解析XML文件,但在一个位置的XML文件中缺少其中一个Childs。因此整个过程返回一个空值。如何检索所有非空的数据?

> function stugas() {
>   var live = new Array();   
>   var url ="http://xml.pinnaclesports.com/pinnacleFeed.aspx?sportType=Football&contest=no&sportSubType=NFL";
>   var parameters = {method : "get", payload : ""};   var xml =
>   UrlFetchApp.fetch(url, parameters).getContentText();   
>   var document = XmlService.parse(xml);
>   var games = document.getRootElement().getChild('events').getChildren('event');  
> if(document == null) {
>     document.getRootElement().getChild('events').getChildren('event');   }   for (var i=0; i < games.length; i++) {
>       vegas=[games[i].getChildText('event_datetimeGMT'),games[i].getChild('participants').getChildren('participant')[0].getChildText('participant_name'),
>                 games[i].getChild('participants').getChildren('participant')[0].getChildText('visiting_home_draw'),
>                 games[i].getChild('participants').getChildren('participant')[1].getChildText('participant_name'),
>                 games[i].getChild('participants').getChildren('participant')[1].getChildText('visiting_home_draw'),
>                 /**games[i].getChild('periods').getChildren('period')[0].getChild('moneyline').getChildText('moneyline_visiting'),
>                 games[i].getChild('periods').getChildren('period')[0].getChild('moneyline').getChildText('moneyline_home'),**/
>                 games[i].getChild('periods').getChildren('period')[0].getChild('spread').getChildText('spread_visiting'),
>                 games[i].getChild('periods').getChildren('period')[0].getChild('spread').getChildText('spread_home'),
>                 games[i].getChild('periods').getChildren('period')[0].getChild('spread').getChildText('spread_adjust_visiting'),
>                 games[i].getChild('periods').getChildren('period')[0].getChild('spread').getChildText('spread_adjust_home'),
>                 games[i].getChild('periods').getChildren('period')[0].getChild('total').getChildText('total_points'),
>                 games[i].getChild('periods').getChildren('period')[0].getChild('total').getChildText('over_adjust'),
>                 games[i].getChild('periods').getChildren('period')[0].getChild('total').getChildText('under_adjust')]
>       
>       
>       live.push(vegas);
>     }
>     return live;   }

1 个答案:

答案 0 :(得分:2)

如果以这种方式编写内部循环,则可以测试每个元素以查看它们是否存在(仅在此处为moneyline执行此操作):

vegas = [];
var game = games[i];
vegas.push(game.getChildText('event_datetimeGMT'));
var participant = game.getChild('participants').getChildren('participant');
vegas.push(participant[0].getChildText('participant_name'));
vegas.push(participant[0].getChildText('visiting_home_draw'));
vegas.push(participant[1].getChildText('participant_name'));
vegas.push(participant[1].getChildText('visiting_home_draw'));
var period = game.getChild('periods').getChildren('period')[0];
if (period.getChild('moneyline')) {
  vegas.push(period.getChild('moneyline').getChildText('moneyline_visiting'));
  vegas.push(period.getChild('moneyline').getChildText('oneyline_home'));
}
else {
  vegas.push("");
  vegas.push("");
}
var spread = game.getChild('periods').getChildren('period')[0].getChild('spread');
vegas.push(spread.getChildText('spread_visiting'));
vegas.push(spread.getChildText('spread_home'));
vegas.push(spread.getChildText('spread_adjust_visiting'));
vegas.push(spread.getChildText('spread_adjust_home'));
vegas.push(period.getChild('total').getChildText('total_points'));
vegas.push(period.getChild('total').getChildText('over_adjust'));
vegas.push(period.getChild('total').getChildText('under_adjust'));