【问题标题】:DOMParser in NodeNode 中的 DOMParser
【发布时间】:2021-03-05 16:41:51
【问题描述】:

我有一个依赖 DOMParser 来解析 XML 的库实现。这在浏览器中运行良好,但显然不能与 Node.js 一起使用。我尝试将 JSDOM 与他们自己的 DOMParser 一起使用,但实际上在实现中存在细微的差异导致我的测试失败。

我正在寻找替代的 domhandler,特别是 htmlparser2。我需要做的是在 htmlparser2 中复制这种行为:

const parser = new DOMParser();
const root: Document = parser.parseFromString(xmlString, "application/xml");

我已经用 htmlparser2 试过这个:

const res = parseDOM(xmlString, { xmlMode: true });

但这会返回类型:Node[] 而不是 Document。我一辈子都找不到来自 htmlparser2 的文档,它会从 XML 生成一个文档,或者一种将我的 Node[] 转换为文档的方法。

问题似乎出在我的浏览器测试中(在使用 Karma 测试时模拟浏览器),由于 JSDom 代码,测试失败了。

即使是这样的代码:

let parser;
if(true){
    parser = new DOMParser();
}else{
    const JsDomParser = new JSDOM().window.DOMParser;
    parser = new JsDomParser();
}

测试失败。我必须真正注释掉 JSDOM 的东西才能让我的测试通过。可能是浏览器不兼容?

任何帮助完成此作为 DOMParser 替换的下降将不胜感激。

【问题讨论】:

  • 我更喜欢将jsdom 用于此类任务。但是我不确定它是否能解决您的问题
  • 我很乐意,他们的 DOMParser 实现似乎与浏览器略有不同,所以它似乎对我来说不合适
  • @Keimeno 实际上我的测试似乎因为 jsdom 的东西而失败。即使代码无法访问,它看起来也破坏了浏览器兼容性。

标签: javascript node.js xml typescript dom


【解决方案1】:

在 Saxon-JS 中,我们使用来自 https://github.com/xmldom/xmldom 的 xml DOM 实现,它对我们来说效果很好,尽管我们最近没有与其他选项进行比较,而且我们的使用有点专业,例如它主要是读取 -只要。此外,我们实际上并没有将它用于解析,因为我们使用 github/isaacs/sax-js ——我们调整了这两种产品以提高边缘情况下的 XML 一致性水平。

我认为我们在 node.js 下的 xmldom 和浏览器中的 XML DOM 实现之间没有遇到任何兼容性问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-06
    • 1970-01-01
    • 1970-01-01
    • 2019-08-09
    • 2011-02-17
    • 1970-01-01
    • 2018-11-09
    相关资源
    最近更新 更多