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