vscode-xml/src/services/XPathEvaluator.ts

30 lines
998 B
TypeScript
Raw Normal View History

2016-01-13 18:01:51 -05:00
'use strict';
import * as xpath from 'xpath';
let DOMParser = require('xmldom').DOMParser;
export class XPathEvaluator {
2016-01-18 08:53:42 -05:00
static evaluate(query: string, xml: string, ignoreDefaultNamespace: boolean): Node[] {
if (ignoreDefaultNamespace) {
xml = xml.replace(/xmlns=".+"/g, (match: string) => {
return match.replace(/xmlns/g, 'xmlns:default');
});
}
2016-01-13 18:01:51 -05:00
let nodes: Node[] = new Array<Node>();
let xdoc: Document = new DOMParser().parseFromString(xml, 'text/xml');
2016-01-18 08:53:42 -05:00
2016-01-13 18:01:51 -05:00
let resolver: xpath.XPathNSResolver = xpath.createNSResolver(xdoc);
let expression: xpath.XPathExpression = xpath.createExpression(query, resolver);
let result: xpath.XPathResult = expression.evaluate(xdoc, xpath.XPathResult.ORDERED_NODE_ITERATOR_TYPE);
let node: Node;
while (node = result.iterateNext()) {
nodes.push(node);
}
return nodes;
}
}