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

Dan*_*Dan 4 xml node.js xml-parsing xml2js

我有一个带有&的xml文档,因此出现错误

   [Error: Invalid character in entity name
   Line: 155
   Column: 63
   Char:  ]
Run Code Online (Sandbox Code Playgroud)

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

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

并将其放入valueProcessor中:

return parse.parseString(xml, {valueProcessors: [escapeIllegalCharacters]});
Run Code Online (Sandbox Code Playgroud)

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

car*_*ant 5

致电之前,您需要先跳过&符parseString

您可以使用此答案中的正则表达式来转义本身不是espace序列一部分的“&”号:

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

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