fontoxpath

A minimalistic XPath 3.1 selector engine for (XML) nodes.
Demo page
How to use
let { evaluateXPathToBoolean, domFacade } = require('fontoxpath');
let documentNode = ...;
console.log(evaluateXPathToBoolean('true()', documentNode, domFacade));
FontoXPath supplies a number of API functions:
- domFacade: A wrapper to the DOM. All DOM accesses should go through here
- 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[]
precompileXPath(xpath: string) => Promise<string>
- 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.
Features
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, but will be implemented at some point in time (and even sooner if you can help!):
- DateTime related functions
- Collation related functions (
fn:compare#3
) - The
?
lookup operator for maps and arrays - XML parsing
The following features are available:
- maps / arrays
- variables using
let
- The
!
bang operator - Most built in dataTypes
For all available features, see the unit tests.
Contribution
To recompile the parser, run the following:
npm install
npm run build [--skip_parser] [--skip_closure]
Note: Rebuilding the closure build depends on Java.
To run the tests, run
npm run test [--ci_mode] [--integration_tests]
The integration tests run all tests only using the externally public API, using the closure build.
QT3 tests
A basic test runner for the QT3 tests can be used by running npm run test --qt3 --integration_tests
.
For this, a recent version of the QT3 test set should be present at test/assets/.