Wrapper for browsers' XPath evaluator with added support for OpenRosa extensions.
For more info on extended XPath expressions/bindings supported by XForms/OpenRosa/OpenDataKit (ODK) see:
yarn add openrosa-xpath-evaluator
npm install --save openrosa-xpath-evaluator
const orxe = require('openrosa-xpath-evaluator');
const evaluate = orxe();
var result = evaluate(
'//ul/li/text()', // XPath expression
document, // context node
null, // namespace resolver
XPathResult.ORDERED_NODE_SNAPSHOT_TYPE
);
// loop through results
for (var i = 0; i < result.snapshotLength; i++) {
var node = result.snapshotItem(i);
alert(node.nodeValue);
}
This library has no explicit dependencies, but expects various DOM & XPath-related values to be supplied by the browser (Element
, Node
, XPathResult
etc.).
To use the ODK digest()
function,
you'll need to add node-forge
to
your project.
- https://www.w3.org/TR/1999/REC-xpath-19991116/
- https://getodk.github.io/xforms-spec/
- https://developer.mozilla.org/en-US/docs/Web/API/XPathEvaluator
- https://developer.mozilla.org/en-US/docs/Web/API/Document/evaluate
- https://developer.mozilla.org/en-US/docs/Web/XPath/Introduction_to_using_XPath_in_JavaScript
- https://developer.mozilla.org/en-US/docs/Web/API/XPathResult
- https://developer.mozilla.org/en-US/docs/Web/API/Node
- namespace:: axis is not supported (but it might work in your browser if you're lucky)
- xpath variables (
$var
) are not supported
The following XPath/ODK/OpenRosa functions are not implemented in this library, but may still work depending on your usage.
- instance()
- current()
- pulldata()
- jr:choice-name()
- jr:itext()
- indexed-repeat()
- arrange source code, e.g.
src/core
andsrc/openrosa
- Create release PR
- Check Dependabot for alerts
- Run
npm update
- Run
npm audit
- Run
npm audit fix --production
to apply most important fixes
- Run
- Run
npm ci
- Run
npm test
- Update
CHANGELOG.md
- Update version in
package.json
- Merge PR with all changes
- Create GitHub release
- Tag and publish the release
- GitHub action will publish it to npm public repository
This library was developed by Medic Mobile for their Enketo-based application. In 2020, it was transferred to the Enketo organization. Many thanks to Medic Mobile for this very valuable contribution to the Enketo and ODK world.
Development of this application was made possible by: