0

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

> 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; } 

回答

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')); 
+0

谢谢哈罗德,你修复 –