我有一个带有&的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, '<');
return (xml);
}
并将其放入valueProcessor:
return parse.parseString(xml, {valueProcessors: [escapeIllegalCharacters]});
但我仍然遇到同样的错误。这是使用xml2js模块转义字符的错误方法吗?
答案 0 :(得分:4)
在调用parseString
之前,您需要转义&符号。
您可以使用this answer中的正则表达式来转义本身不属于espace序列的&符号:
return parse.parseString(
xml.replace(/&(?!(?:apos|quot|[gl]t|amp);|#)/g, '&')
);
这是否能解决您的问题将取决于您的XML内容。例如,这种简单的机制也会逃避CDATA
部分中的任何&符号,但这些部分中的&符号应保留未转义状态。