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

时间:2017-01-27 21:04:12

标签: node.js xml xml-parsing xml2js

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

1 个答案:

答案 0 :(得分:4)

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

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

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

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