我知道工作人员无法直接操作文档,但DOM API方法如何?他们去哪儿了?!
例如,如果我发出一个接收HTML片段的请求,那么如果只需要解析它以便从特定节点检索某些数据,我应该做什么?!
在网络工作者上使用虚拟DOM绝对没办法?!
答案 0 :(得分:4)
DOMParser
或document.implementation
通常用于在浏览器中将HTML解析为DOM。工作环境中都没有。
在Firefox中,这是不可能的,因为有人刚刚完全延迟并且决定所有线程只有一个DOM解析器实例。请参阅此错误:https://bugzilla.mozilla.org/show_bug.cgi?id=677123
在谷歌浏览器中,它也无法正常工作。
没错,因为浏览器开发人员并没有意识到DOM和XML解析将成为WebWorkers的主要用途之一,我们不得不回到外部库。最好的选择似乎是JSDOM,但您需要弄明白how to browserify it。
这是DOMParser
尝试失败的原因,我将其保留在此主题的未来实验中:https://jsfiddle.net/svaqb2wn/2/
答案 1 :(得分:1)
我刚刚建立了一个解决这个问题的库。 它基于循环架构,它仍然是WIP,但你可以在这里找到源。
答案 2 :(得分:0)
答案 3 :(得分:-1)
首先,您可能认为解析XML的正确方法是XMLHttpRequest
,在10个案例中,您认为正确。但是,在当前的网络工作者规范中,我们无法访问XMLHttpRequest
。另一种方法是使用一些流行的XML解析库之一:
https://github.com/isaacs/sax-js
http://xmljs.sourceforge.net/index.html或https://www.npmjs.com/package/xmljs
HTML只是XML,因此您可以通过这种方式解析数据。使用上面npmjs中的xmljs的示例:
var XmlParser = require("xmljs");
var fs = require("fs");
var p = new XmlParser({ strict: true });
var xml = fs.readFileSync("./SOAP1.xml"); // XML in the examples direct
var xmlNode = p.parseString(xml, function(err, xmlNode) {
if(err) {
console.error(err);
return;
}
var nodes = xmlNode.path(["Envelope", "Body", "GetstockpriceResponse", "Price"], true);
console.log(nodes.map(function(n) { return n.text; }));
});