我正在使用通过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的新手,所以请原谅我的无知,并提前感谢你的帮助。
答案 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);
});
};
您可以确保结果数据存在的唯一地方是回调,因此您要对其执行的所有操作都必须在回调中完成。