5

我有一个带有 & 的 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 模块转义字符的错误方法吗?

4

1 回答 1

7

您需要在调用parseString.

您可以使用此答案中的正则表达式来转义本身不属于 espace 序列的 & 符号:

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

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

于 2017-01-27T21:42:33.433 回答