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

How do I escape characters using the Node xml2js module?

我有一个 xml 文档,里面有一个 &,所以我收到一个错误

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

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

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

并将其放入 valueProcessor:

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

但我仍然遇到同样的错误。这是使用 xml2js 模块转义字符的错误方法吗?

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

您可以使用 this answer 中的正则表达式来转义本身不属于空格序列的 & 符号:

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

这是否能解决您的问题将取决于您 XML 的内容。例如,这种简单的机制也将转义 CDATA 部分中的任何 & 符号,但这些部分中的 & 符号应不转义。