Skip to content
forked from goto100/xpath

DOM 3 Xpath implemention and helper for node.js

License

Notifications You must be signed in to change notification settings

backslash47/xpath

 
 

Repository files navigation

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.

About

DOM 3 Xpath implemention and helper for node.js

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • TypeScript 100.0%