如何使用Node xml2js模块转义字符?

我有一个&的XML文件,所以我得到一个错误

[Error: Invalid character in entity name Line: 155 Column: 63 Char: ] 

我写了一个函数来转义非法的xml字符:

 const escapeIllegalCharacters = (xml) => { xml = xml .replace(/&/g,'&amp;') .replace(/"/g, '&quot;') .replace(/'/g, '&apos;') .replace(/>/g, '&gt;') .replace(/</g, '&lt;'); return (xml); } 

并把它放到一个valueProcessor中:

 return parse.parseString(xml, {valueProcessors: [escapeIllegalCharacters]}); 

但是我仍然得到相同的错误。 这是错误的方式来使用xml2js模块转义字符?

您需要在调用parseString之前转义&符号。

你可以使用这个答案的正则expression式来逃避本身不是espace序列的一部分的&符号:

 return parse.parseString( xml.replace(/&(?!(?:apos|quot|[gl]t|amp);|#)/g, '&amp;') ); 

这是否能解决你的问题将取决于你的XML的内容。 例如,这个过分简化的机制也会在CDATA部分中CDATA任何&符号,但这些部分中的&符号应该不作任何处理。