【问题标题】:How do I escape characters using the Node xml2js module?如何使用 Node xml2js 模块转义字符?
【发布时间】:2017-06-13 15:59:20
【问题描述】:

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

【问题讨论】:

    标签: node.js xml xml-parsing xml2js


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 感谢您的回复!所以我实际上尝试在调用 parseString 之前运行我的转义函数,但后来我遇到了你提到的问题,我在转义 xml 字符本身的开始和结束标签。我认为您的上述解决方案适用于&符号,但是否有一个通用解决方案仅在标签之间转义所有非法字符?我认为 valueProcessors 解决方案就是它......
    • 底线是您的 XML 无效并且解析器不会接受它。也许还有另一个更宽容的?如果您在其中也有未转义的&lt;&gt; 字符,那么您就遇到了真正的问题。任何解析器都需要确定某物是否是标签等的方法。因此总会有歧义并且没有通用解决方案。
    • 是的,公平点,我检查了你的答案,它适用于&符号,我将其标记为正确。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-08
    相关资源
    最近更新 更多