Package Exports
- xpath-ts
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (xpath-ts) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
XPath library
DOM 3 and 4 XPath 1.0 implemention for browser and Node.js environment with support for custom Function, Variable and Namespace mapping.
Requirements
Release Notes
See CHANGELOG.md
Usage
Install with npm:
npm install xpath-ts
This library is xml engine agnostic but I recommend to use xmldom-ts, xmldom or jsdom
npm install xmldom-ts
or
npm install xmldom
or
npm install jsdom
API Documentation
Can be found here. See below for example usage.
Your first xpath:
import { DOMParserImpl as dom } from 'xmldom-ts';
import * as xpath from 'xpath-ts';
const xml = '<book><title>Harry Potter</title></book>';
const doc = new dom().parseFromString(xml);
const nodes = xpath.select('//title', doc);
console.log(nodes[0].localName + ': ' + nodes[0].firstChild.data);
console.log('Node: ' + nodes[0].toString());
➡
title: Harry Potter
Node: <title>Harry Potter</title>
Alternatively
Using the same interface you have on modern browsers (MDN)
import { DOMParserImpl as dom } from 'xmldom-ts';
import * as xpath from 'xpath-ts';
const xml = "<book author='J. K. Rowling'><title>Harry Potter</title></book>";
const doc = new dom().parseFromString(xml);
xpath.installDOM3XPathSupport(doc);
const result = doc.evaluate(
'/book/title', // xpathExpression
doc, // contextNode
null, // namespaceResolver
xpath.XPathResult.ANY_TYPE, // resultType
null // result
);
let node = result.iterateNext();
while (node) {
console.log(node.localName + ': ' + node.firstChild.data);
console.log('Node: ' + node.toString());
node = result.iterateNext();
}
➡
title: Harry Potter
Node: <title>Harry Potter</title>
Evaluate string values directly:
import { DOMParserImpl as dom } from 'xmldom-ts';
import * as xpath from 'xpath-ts';
const xml = '<book><title>Harry Potter</title></book>';
const doc = new dom().parseFromString(xml);
const title = xpath.select('string(//title)', doc);
console.log(title);
➡
Harry Potter
Namespaces
import { DOMParserImpl as dom } from 'xmldom-ts';
import * as xpath from 'xpath-ts';
const xml = "<book><title xmlns='myns'>Harry Potter</title></book>";
const doc = new dom().parseFromString(xml);
const node = xpath.select("//*[local-name(.)='title' and namespace-uri(.)='myns']", doc)[0];
console.log(node.namespaceURI);
➡
myns
Namespaces with easy mappings
import { DOMParserImpl as dom } from 'xmldom-ts';
import * as xpath from 'xpath-ts';
const xml = "<book xmlns:bookml='http://example.com/book'><bookml:title>Harry Potter</bookml:title></book>";
const select = xpath.useNamespaces({ bookml: 'http://example.com/book' });
console.log(select('//bookml:title/text()', doc)[0].nodeValue);
➡
Harry Potter
Default namespace with mapping
import { DOMParserImpl as dom } from 'xmldom-ts';
import * as xpath from 'xpath-ts';
const xml = "<book xmlns='http://example.com/book'><title>Harry Potter</title></book>";
const select = xpath.useNamespaces({ bookml: 'http://example.com/book' });
console.log(select('//bookml:title/text()', doc)[0].nodeValue);
➡
Harry Potter
Attributes
import { DOMParserImpl as dom } from 'xmldom-ts';
import * as xpath from 'xpath-ts';
const xml = "<book author='J. K. Rowling'><title>Harry Potter</title></book>";
const doc = new dom().parseFromString(xml);
const author = xpath.select1('/book/@author', doc).value;
console.log(author);
➡
J. K. Rowling
Developing and Testing
Download
git clone 'https://github.com/backslash47/xpath-ts'
cd xpath-ts
Install
npm install
Build
npm run build
You will get the transpiled code under '/dist/lib' and typings under '/dist/types'.
Test
Run standard tests with Mocha + Chai testing framework
npm test
Authors
- Cameron McCormack - Initial work - blog
- Yaron Naveh - blog
- goto100
- Jimmy Rishe
- Thomas Weinert
- Matus Zamborsky - TypeScript rewrite - Backslash47
- Others - others
Licence
This project is licensed under the MIT License - see the LICENCE.md file for details.