在Lambda函数中使用xml2js解析XML

时间:2018-05-21 13:43:50

标签: node.js aws-lambda alexa-skills-kit

我正在使用通过Web服务提供数据的Lambda函数构建Alexa技能。 Web服务返回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 :(得分:0)

将回调调用放入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);
 });
};

您可以确保结果数据存在的唯一地方是回调,因此您要对其执行的所有操作都必须在回调中完成。