JSPM

  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 50500
  • Score
    100M100P100Q148249F
  • License MIT

DOM 3 and 4 XPath 1.0 implemention for browser and Node.js environment.

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.