DOM 3 XPath implemention and helper for node.js and the web
npm install xpathjavascript
var xpath = require('xpath');
var dom = require('@xmldom/xmldom').DOMParser;
var xml = "Harry Potter ";
var doc = new dom().parseFromString(xml, 'text/xml');
var nodes = xpath.select("//title", doc);
console.log(nodes[0].localName + ": " + nodes[0].firstChild.data);
console.log("Node: " + nodes[0].toString());
```
➡
title: Harry Potter
Node: Harry Potter
$3
Using the same interface you have on modern browsers ([MDN])
```javascript
var node = null;
var xml = "Harry Potter ";
var doc = new dom().parseFromString(xml, 'text/xml');
var result = xpath.evaluate(
"/book/title", // xpathExpression
doc, // contextNode
null, // namespaceResolver
xpath.XPathResult.ANY_TYPE, // resultType
null // result
);
node = result.iterateNext();
while (node) {
console.log(node.localName + ": " + node.firstChild.data);
console.log("Node: " + node.toString());
node = result.iterateNext();
}
```
➡
title: Harry Potter
Node: Harry Potter
Evaluate string values directly:
```javascript
var xml = "Harry Potter ";
var doc = new dom().parseFromString(xml, 'text/xml');
var title = xpath.select("string(//title)", doc);
console.log(title);
```
➡
Harry Potter
Namespaces
```javascript
var xml = "Harry Potter ";
var doc = new dom().parseFromString(xml, 'text/xml');
var node = xpath.select("//*[local-name(.)='title' and namespace-uri(.)='myns']", doc)[0];
console.log(node.namespaceURI);
```
➡
myns
Namespaces with easy mappings
```javascript
var xml = "Harry Potter "
var select = xpath.useNamespaces({"bookml": "http://example.com/book"});
console.log(select('//bookml:title/text()', doc)[0].nodeValue);
```
➡
Harry Potter
Default namespace with mapping
```javascript
var xml = "Harry Potter "
var select = xpath.useNamespaces({"bookml": "http://example.com/book"});
console.log(select('//bookml:title/text()', doc)[0].nodeValue);
```
➡
Harry Potter
Attributes
```javascript
var xml = "Harry Potter ";
var doc = new dom().parseFromString(xml, 'text/xml');
var author = xpath.select1("/book/@author", doc).value;
console.log(author);
````