xpath2
Version:
DOM 3 XPath implementation (with XPath 2.0 language support)
39 lines (30 loc) • 1.6 kB
JavaScript
var cStaticContext = require('xpath2.js').StaticContext;
var cXPathExpression = require('./classes/XPathExpression');
var cXPathNSResolver = require('./classes/XPathNSResolver');
var oDocument = global.document;
// Create HTML static context (this has default xhtml namespace)
var oHTMLStaticContext = new cStaticContext;
oHTMLStaticContext.baseURI = oDocument ? oDocument.location.href : null;
oHTMLStaticContext.defaultFunctionNamespace = "http://www.w3.org/2005/xpath-functions";
oHTMLStaticContext.defaultElementNamespace = "http://www.w3.org/1999/xhtml";
// Create XML static context (this has default element null namespace)
var oXMLStaticContext = new cStaticContext;
oXMLStaticContext.defaultFunctionNamespace = "http://www.w3.org/2005/xpath-functions";
function createExpression(sExpression, oResolver) {
oXMLStaticContext.namespaceResolver = oResolver;
return new cXPathExpression(sExpression, oXMLStaticContext);
}
function createNSResolver(oNode) {
return new cXPathNSResolver(oNode);
}
function evaluate(sExpression, oContextNode, oResolver, nType, oResult) {
// Choose static context
var oStaticContext = oContextNode && oContextNode.nodeType && (oContextNode.nodeType == 9 ? oContextNode : oContextNode.ownerDocument).createElement("div").tagName == "DIV" ? oHTMLStaticContext : oXMLStaticContext;
oStaticContext.namespaceResolver = oResolver;
return new cXPathExpression(sExpression, oStaticContext).evaluate(oContextNode, nType, oResult);
}
module.exports = {
createExpression: createExpression,
createNSResolver: createNSResolver,
evaluate: evaluate
};