diff --git a/packages/node_modules/@node-red/nodes/core/parsers/70-XML.js b/packages/node_modules/@node-red/nodes/core/parsers/70-XML.js index a778c4d72..538368730 100644 --- a/packages/node_modules/@node-red/nodes/core/parsers/70-XML.js +++ b/packages/node_modules/@node-red/nodes/core/parsers/70-XML.js @@ -33,7 +33,13 @@ module.exports = function(RED) { parseString(value, options, function (err, result) { if (err) { done(err); } else { - value = result; + // TODO: With xml2js@0.5.0, they return an object with + // a null prototype. This could cause unexpected + // issues. So for now, we have to reconstruct + // the object with a proper prototype. + // Once https://github.com/Leonidas-from-XIV/node-xml2js/pull/674 + // is merged, we can revisit and hopefully remove this hack + value = fixObj(result) RED.util.setMessageProperty(msg,node.property,value); send(msg); done(); @@ -46,4 +52,18 @@ module.exports = function(RED) { }); } RED.nodes.registerType("xml",XMLNode); + + + function fixObj(obj) { + const res = {} + const keys = Object.keys(obj) + keys.forEach(k => { + if (typeof obj[k] === 'object' && obj[k]) { + res[k] = fixObj(obj[k]) + } else { + res[k] = obj[k] + } + }) + return res + } }