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