【发布时间】: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