@mnakhla/rocketrml
Version:
This is a forked rocketrml mapper for the RDF mapping language
49 lines (41 loc) • 1.12 kB
JavaScript
const xpath = require('fontoxpath');
const { DOMParser } = require('slimdom');
const helper = require('./helper');
const parseXml = (xml) => new DOMParser().parseFromString(xml, 'text/xml');
xpath.registerCustomXPathFunction(
'fn:parse-xml',
['xs:string'],
'item()',
(_, e) => parseXml(e),
);
class XMLParser {
constructor(inputPath, iterator, options) {
const doc = helper.readFileString(inputPath, options);
this.docArray = xpath.evaluateXPathToNodes(
iterator,
parseXml(doc),
null,
null,
{ language: xpath.evaluateXPath.XPATH_3_1_LANGUAGE },
);
}
getCount() {
return this.docArray.length;
}
getData(index, path) {
if (path.startsWith('PATH~')) {
path = `${path.slice(5)}/path()`;
}
const object = this.docArray[index];
const strings = xpath.evaluateXPathToStrings(
path,
object,
null,
null,
xpath.evaluateXPath.ANY_TYPE,
{ language: xpath.evaluateXPath.XPATH_3_1_LANGUAGE },
);
return strings;
}
}
module.exports = XMLParser;