我使用以下循环和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; }
答案 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'));