【问题标题】:Invalid character entity parsing xml无效的字符实体解析 xml
【发布时间】:2014-09-12 15:59:01
【问题描述】:

我正在尝试解析一串 xml,但出现错误

[Error: Invalid character entity
Line: 0
Column: 837
Char:  ]

xml 不喜欢括号吗?我需要用 \\] 之类的东西替换所有括号吗?谢谢

【问题讨论】:

  • 报告以 [ 开头并以 ] 结尾,坏字符在右括号之前。减少您的 XML 文件,直到几行仍然存在此问题,然后将其添加到您的问题中。我们不知道你现在在做什么。
  • 基本上这是 json 对象的一部分。我知道它必须是某个字符,因为如果我传入不同的 xml,它就可以工作。所以它在xml中。我希望我可以发布 xml 但它的敏感数据
  • 大多数带括号的 xml 看起来像“订单设置限制 - 导航到任何产品 A [TBD]”,不带引号

标签: node.js xml2js


【解决方案1】:

好的,无效字符是破折号和 &。我通过执行以下操作修复了它:

xml = data.testSteps.replace(/[\n\r]/g, '\\n')
                    .replace(/&/g,"&")
                    .replace(/-/g,"-");

谢谢

【讨论】:

  • 出于性能原因,我将 replace(/[\n\r]/g, '\\n') 排除在外。
【解决方案2】:

使用节点 domparser 将不必对每个不容易被解析为字符串的字符进行字符串替换。如果您要解析大量可能包含不同字符的 XML,这将特别有用。

我会推荐xmldom,因为我已经成功地使用了xml2js

组合用法如下所示:

var parseString = require('xml2js').parseString;
var DOMParser = require('xmldom').DOMParser;

var xmlString = "<test>some stuff </test>";
var xmlStringSerialized = new DOMParser().parseFromString(xmlString, "text/xml");
    parseString(xmlStringSerialized, function (err, result) {
        if (err) {
            //did not work
        } else {
            //worked! use JSON.stringify() 
            var allDone = JSON.stringify(result);
        }
    });

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-21
    • 1970-01-01
    • 2017-03-22
    相关资源
    最近更新 更多