Javascript 解析的XML文档中的XPath错误(错误文档错误)
我正在为Android创建Firefox扩展,但从Javascript 解析的XML文档中的XPath错误(错误文档错误),javascript,firefox,xpath,firefox-addon,firefox-addon-sdk,Javascript,Firefox,Xpath,Firefox Addon,Firefox Addon Sdk,我正在为Android创建Firefox扩展,但从XMLHttpRequest检索的XML文档有问题:我找不到选择节点的方法。我找到的更好的解决方案是这样的,但在文档上选择with xpath时出现了以下错误: WrongDocumentError: Node cannot be used in a document other than the one in which it was created 这是我的代码: var parser = Cc["@mozilla.org/xmlextra
XMLHttpRequest
检索的XML文档有问题:我找不到选择节点的方法。我找到的更好的解决方案是这样的,但在文档上选择with xpath时出现了以下错误:
WrongDocumentError: Node cannot be used in a document other than the one in which it was created
这是我的代码:
var parser = Cc["@mozilla.org/xmlextras/domparser;1"].createInstance(Ci.nsIDOMParser);
var parsedXml = parser.parseFromString(xmlhttp.responseText, "text/xml");
var xpathExpression = "//td[contains(.,'Raw text')]/../td[2]/pre";
var res = window.content.document.evaluate(xpathExpression, parsedXml, null, window.XPathResult.STRING_TYPE , null);
如果我将“评估”替换为下一行:
var res = parsedXml.selectSingleNode(xpathExpression);
然后我得到以下错误:
[JavaScript错误:“parsedXml.selectSingleNode不是函数”
{文件:resource://gre/modules/addons/XPIProvider.jsm ->
罐子:file:///data/data/org.mozilla.fennec/files/mozilla/ggz9zzjr.default/extensions/qrReader@qrReader.xpi!/bootstrap.js“
行:61}]
parseFromString
返回文档对象selectSingleNode
不是文档功能。您不能使用标准的文档.getElementsByCassName
、文档.getElementById
或文档.querySelector
选择节点吗?试试看
var window = parsedXml.ownerDocument.defaultView;
var res = window.content.document.evaluate(xpathExpression, parsedXml, null, window.XPathResult.STRING_TYPE , null);
嗯,异常的名称,
ErrorDocumentErrort
泄露了它。您试图在不属于同一文档的DOM(文档
)上调用.evaluate()
。evaluate()已绑定到
nsIDOMParser
实际上将返回一个新的XMLDocument
,它本身有一个.evaluate()
,您必须使用它
var parser = Cc["@mozilla.org/xmlextras/domparser;1"].
createInstance(Ci.nsIDOMParser);
var parsedDoc = parser.parseFromString(
'<?xml version="1.0"?>\n<doc><elem>Raw text</elem></doc>',
"text/xml");
var xpathExpression = "//elem[contains(.,'Raw text')]";
var res = parsedDoc.evaluate(
xpathExpression,
parsedDoc,
null,
XPathResult.STRING_TYPE,
null);
console.log(res, res.stringValue);
var req = new XMLHttpRequest();
req.onload = function() {
var doc = req.response;
var h1 = doc.evaluate("//h1", doc, null, XPathResult.STRING_TYPE, null);
console.log(h1.stringValue);
// Alternative in some cases
h1 = doc.querySelector("h1");
console.log(h1.textContent);
};
req.open("GET", "http://example.org/");
req.responseType = "document"; // Parse as text/html
req.send();