A minimalistic XPath 3.1 selector engine for (XML) nodes.
const { evaluateXPathToBoolean } = require('fontoxpath');
const documentNode = new DOMParser().parseFromString('<xml/>', 'text/xml');
console.log(evaluateXPathToBoolean('/xml => exists()', documentNode)); // => true
FontoXPath supplies a number of API functions:
- A number of
evaluateXPath.*
functions:evaluateXPath(xpath: string, contextNode: Node, domFacade: ?DomFacade=, variables: Object={}, returnType: number) => *
evaluateXPathToNodes(xpath: string, contextNode: Node, domFacade: ?DomFacade=, variables: Object={}, options: {namespaceResolver: function(string):string?}) => Node[]
evaluateXPathToFirstNode(xpath: string, contextNode: Node, domFacade: ?DomFacade=, variables: Object={}, options: {namespaceResolver: function(string):string?}) => Node
evaluateXPathToBoolean(xpath: string, contextNode: Node, domFacade: ?DomFacade=, variables: Object={}, options: {namespaceResolver: function(string):string?}) => boolean
evaluateXPathToNumber(xpath: string, contextNode: Node, domFacade: ?DomFacade=, variables: Object={}, options: {namespaceResolver: function(string):string?}) => number
evaluateXPathToNumbers(xpath: string, contextNode: Node, domFacade: ?DomFacade=, variables: Object={}, options: {namespaceResolver: function(string):string?}) => number[]
evaluateXPathToString(xpath: string, contextNode: Node, domFacade: ?DomFacade=, variables: Object={}, options: {namespaceResolver: function(string):string?}) => string
precompileXPath(xpath: string) => Promise<string>
- Precompile an XPath expression for future use. This uses a webworker to populate an IndexedDB database so that the XPath is available for future use. This is a no-op on systems without indexedDB.
registerCustomXPathFunction(name: string, signature: string[], returnType: string, callback: function)
- Can be used to register custom functions. They are registered globally.
Note that this engine assumes XPath 1.0 compatibility mode turned off.
Not all XPath 3.1 functions are implemented yet. We accept pull requests for missing features.
The following features are unavailable at this moment, but will be implemented at some point in time (and even sooner if you can help!):
- Some DateTime related functions
- Collation related functions (
fn:compare#3
) - functions using patterns
- Some other miscellaneous functions
- The
?
lookup operator for maps and arrays - XML parsing
- The
treat as
operator - The
>>
and<<
operators
For all available features, see the unit tests.
This engine is pretty DOM-agnostic, it has a good track record with the browser DOM implementations and slimdom.js. There are a number of known issues with xmldom because it does not follow the DOM spec on some features including namespaces.
Please refer to the Contribution Guide.