Разбор XML с использованием xml2js в лямбда-функции - PullRequest
0 голосов
/ 21 мая 2018

Я создаю навык Alexa, используя функцию Lambda, которая обслуживает данные через веб-сервис.Веб-сервис возвращает данные XML, поэтому я использую xml2js (который поддерживается).

Возвращенный XML выглядит следующим образом:

<?xml version="1.0" encoding="utf-8"?>
<DailySummary>
  <day dayOfWeek="Sunday" Date="04/22/2018" attribute1="test1" attribute2="test3" />
</DailySnapshot>

Как получить доступ к атрибутам элемента?

В файле index.js я добавил следующий код в

'use strict';
exports.handler = (event, context, callback) => {
 var parseString = require('xml2js').parseString;
 var extractedData = "";
 var xml = '<?xml version="1.0" encoding="utf-8"?><DailySummary><day dayOfWeek="Sunday" Date="04/22/2018" attribute1="test1" attribute2="test3" />   </DailySnapshot>';
 parseString(xml, function (err, result) 
 {
   if(err) throw err;
   extractedData = result['DailySummary']['day'][0].$.type
 });        

callback(null,extractedData);    
};

Я получаю сообщение об ошибке:

Function Logs:
START RequestId: b9c528f7-5cfc-11e8-a617-211b3668a43f Version: $LATEST
2018-05-21T13:41:56.667Z    b9c528f7-5cfc-11e8-a617-211b3668a43f    Error: Unexpected close tag
Line: 0
Column: 153

Я новичок в node.jsПрошу прощения за мое невежество и заранее благодарю за помощь.

1 Ответ

0 голосов
/ 21 мая 2018

Просто поместите обратный вызов в обратный вызов parseString.

'use strict';
exports.handler = (event, context, callback) => {
 var parseString = require('xml2js').parseString;
 var extractedData = "";
 var xml = '<?xml version="1.0" encoding="utf-8"?><DailySummary><day dayOfWeek="Sunday" Date="04/22/2018" attribute1="test1" attribute2="test3" />   </DailySnapshot>';
 parseString(xml, (err, result) => {
   if(err) throw err;
   extractedData = result['DailySummary']['day'][0].$.type;
   callback(null,extractedData);
 });
};

Единственное место, в котором вы уверены, что данные результата существуют, - это обратный вызов, так что все, что вы хотите с ним сделатьдолжно быть сделано в обратном вызове.

...