mardi 4 août 2015

XPathEvaluator in Firefox addon

I am attempting to follow this article to evaluate an XPath expression. My code is copy/pasted from the article:

// Evaluate an XPath expression aExpression against a given DOM node
// or Document object (aNode), returning the results as an array
// thanks wanderingstan at morethanwarm dot mail dot com for the
// initial work.
function evaluateXPath(aNode, aExpr) {
  var xpe = new XPathEvaluator();
  var nsResolver = xpe.createNSResolver(aNode.ownerDocument == null ?
    aNode.documentElement : aNode.ownerDocument.documentElement);
  var result = xpe.evaluate(aExpr, aNode, nsResolver, 0, null);
  var found = [];
  var res;
  while (res = result.iterateNext())
    found.push(res);
  return found;
}

However, I'm getting this error:

Message: ReferenceError: XPathEvaluator is not defined

Is Mozilla's article out of date, perhaps? Is there a more up-to-date article available on parsing XML in an SDK add-on?

Edit. When I tried it this way:

var {Cc, Ci} = require("chrome");
var domXPathEvaluator = Cc["@http://ift.tt/1II9uXP"].createInstance(Ci.nsIDOMXPathEvaluator);

I got a long error message:

- message = Component returned failure code: 0x80570019 (NS_ERROR_XPC_CANT_CREATE_WN) [nsIJSCID.createInstance]
- fileName = undefined
- lineNumber = 14
- stack = @undefined:14:undefined|@http://resourcehelloworld-addon/index.js:14:25|run@resourcegre/modules/commonjs/sdk/addon/runner.js:145:19|startup/</<@resourcegre/modules/commonjs/sdk/addon/runner.js:86:7|Handler.prototype.process@resourcegre/modules/Promise-backend.js:920:23|this.PromiseWalker.walkerLoop@resourcegre/modules/Promise-backend.js:799:7|this.PromiseWalker.scheduleWalkerLoop/<@resourcegre/modules/Promise-backend.js:738:39|Promise*this.PromiseWalker.scheduleWalkerLoop@resourcegre/modules/Promise-backend.js:738:7|this.PromiseWalker.schedulePromise@resourcegre/modules/Promise-backend.js:762:7|this.PromiseWalker.completePromise@resourcegre/modules/Promise-backend.js:705:7|handler@resourcegre/modules/commonjs/sdk/addon/window.js:56:3|
- toString = function () /* use strict */ toString

Aucun commentaire:

Enregistrer un commentaire