Fix #22
This commit is contained in:
parent
65fca7bdf4
commit
c6efe2a2dd
@ -78,6 +78,11 @@
|
||||
"type": "array",
|
||||
"default": ["-xquery", "$(script)", "-in", "$(input)", "-out", "$(input).output.xml"],
|
||||
"description": "Arguments to be passed to the execution engine. '$(script)' and '$(input)' refer to the XQuery script and input XML file, respectively."
|
||||
},
|
||||
"xmlTools.ignoreDefaultNamespace": {
|
||||
"type": "boolean",
|
||||
"default": true,
|
||||
"description": "Ignores default xmlns attribute when evaluating XPath."
|
||||
}
|
||||
}
|
||||
},
|
||||
|
@ -6,6 +6,7 @@ import { XPathEvaluator } from '../services/XPathEvaluator';
|
||||
|
||||
const CFG_SECTION: string = 'xmlTools';
|
||||
const CFG_PERSIST_QUERY: string = 'persistXPathQuery';
|
||||
const CFG_IGNORE_DEFAULT_XMLNS: string = 'ignoreDefaultNamespace';
|
||||
const MEM_QUERY_HISTORY: string = 'xpathQueryHistory';
|
||||
const MEM_QUERY_LAST: string = 'xPathQueryLast';
|
||||
const OUTPUT_CHANNEL: string = 'XPath Results';
|
||||
@ -54,9 +55,11 @@ export class XPathFeatureProvider {
|
||||
// showInputBox() will return undefined if the user dimissed the prompt
|
||||
if (query) {
|
||||
|
||||
let ignoreDefaultNamespace: boolean = vsc.workspace.getConfiguration(CFG_SECTION).get<boolean>(CFG_IGNORE_DEFAULT_XMLNS, true);
|
||||
|
||||
// run the query
|
||||
let xml: string = editor.document.getText();
|
||||
let nodes: Node[] = XPathEvaluator.evaluate(query, xml);
|
||||
let nodes: Node[] = XPathEvaluator.evaluate(query, xml, ignoreDefaultNamespace);
|
||||
|
||||
// show the results to the user
|
||||
let outputChannel: vsc.OutputChannel = vsc.window.createOutputChannel(OUTPUT_CHANNEL);
|
||||
|
@ -5,10 +5,18 @@ import * as xpath from 'xpath';
|
||||
let DOMParser = require('xmldom').DOMParser;
|
||||
|
||||
export class XPathEvaluator {
|
||||
static evaluate(query: string, xml: string): Node[] {
|
||||
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');
|
||||
});
|
||||
}
|
||||
|
||||
let nodes: Node[] = new Array<Node>();
|
||||
|
||||
let xdoc: Document = new DOMParser().parseFromString(xml, 'text/xml');
|
||||
console.log(xdoc);
|
||||
|
||||
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);
|
||||
|
Loading…
Reference in New Issue
Block a user