-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.js
More file actions
39 lines (32 loc) · 931 Bytes
/
index.js
File metadata and controls
39 lines (32 loc) · 931 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
const libxml = require("libxmljs2");
const fs = require("fs");
const recursiveJsonNest = (element, output) => {
let elementName = element.name();
if(elementName !== 'text'){
let elementObj = {};
element.attrs().forEach((attr) => {
elementObj[`@${attr.name()}`] = attr.value();
});
const elementChildren = element.childNodes();
elementChildren.forEach((child) => {
elementObj = recursiveJsonNest(child, elementObj);
});
if(Object.keys(output).includes(elementName)){
output[elementName].push(elementObj);
} else {
output[elementName] = [elementObj];
};
}else{
output['text()'] = element.text();
};
return output;
}
const main = (filePath) => {
const xml_text = fs.readFileSync(filePath, "utf-8");
const root = libxml.parseXml(xml_text).root();
const output = recursiveJsonNest(root, {});
return output;
}
module.exports = {
main: main,
};