pm4js
Version:
Process Mining for Javascript
68 lines (65 loc) • 2.38 kB
JavaScript
class XesImporter {
static apply(xmlString) {
let parser = new DOMParser();
var xmlDoc = parser.parseFromString(xmlString, "text/xml");
let xmlLog = xmlDoc.getElementsByTagName("log")[0];
let eventLog = new EventLog();
XesImporter.parseXmlObj(xmlLog, eventLog);
let desc = "Log imported from a XES file"
if ("name" in eventLog.attributes) {
desc = eventLog.attributes["name"];
}
Pm4JS.registerObject(eventLog, "Log imported from a XES file");
return eventLog;
}
static parseXmlObj(xmlObj, target) {
for (let childId in xmlObj.childNodes) {
let child = xmlObj.childNodes[childId];
if (child.tagName == "string") {
let xmlAttr = new Attribute(child.getAttribute("value"));
target.attributes[child.getAttribute("key")] = xmlAttr;
XesImporter.parseXmlObj(child, xmlAttr);
}
else if (child.tagName == "date") {
let xmlAttr = new Attribute(new Date(child.getAttribute("value")));
target.attributes[child.getAttribute("key")] = xmlAttr;
XesImporter.parseXmlObj(child, xmlAttr);
}
else if (child.tagName == "float") {
let xmlAttr = new Attribute(parseFloat(child.getAttribute("value")));
target.attributes[child.getAttribute("key")] = xmlAttr;
XesImporter.parseXmlObj(child, xmlAttr);
}
else if (child.tagName == "event") {
let eve = new Event();
target.events.push(eve);
XesImporter.parseXmlObj(child, eve);
}
else if (child.tagName == "trace") {
let trace = new Trace();
target.traces.push(trace);
XesImporter.parseXmlObj(child, trace);
}
else if (child.tagName == "extension") {
target.extensions[child.getAttribute("name")] = [child.getAttribute("prefix"), child.getAttribute("uri")];
}
else if (child.tagName == "global") {
let targetObj = new LogGlobal();
target.globals[child.getAttribute("scope")] = targetObj;
XesImporter.parseXmlObj(child, targetObj);
}
else if (child.tagName == "classifier") {
target.classifiers[child.getAttribute("name")] = child.getAttribute("keys");
}
}
}
}
try {
module.exports = {XesImporter: XesImporter};
global.XesImporter = XesImporter;
global.DOMParser = require('xmldom').DOMParser;
}
catch (err) {
// not in node
}
Pm4JS.registerImporter("XesImporter", "apply", ["xes"], "XES Importer", "Alessandro Berti");