Skip to content

Commit 1e26935

Browse files
fix dmn parsing bug
1 parent 9bf1582 commit 1e26935

File tree

3 files changed

+56
-44
lines changed

3 files changed

+56
-44
lines changed

builder-frontend/package-lock.json

Lines changed: 37 additions & 34 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

builder-frontend/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,11 @@
1515
"@kogito-tooling/kie-editors-standalone": "^0.16.0",
1616
"@solidjs/router": "^0.15.3",
1717
"dmn-js": "^17.2.1",
18+
"fast-xml-parser": "^5.2.5",
1819
"firebase": "^11.9.1",
1920
"lodash.debounce": "^4.0.8",
2021
"solid-bootstrap": "^1.0.21",
21-
"solid-js": "^1.9.5",
22-
"xml2js": "^0.6.2"
22+
"solid-js": "^1.9.5"
2323
},
2424
"devDependencies": {
2525
"@tailwindcss/postcss": "^4.1.8",

builder-frontend/src/components/project/ResultsEditor.jsx

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,31 @@
11
import { createSignal, For, onMount } from "solid-js";
22
import { updateScreener } from "../../api/screener";
3-
import { parseStringPromise } from "xml2js";
3+
import { XMLParser } from "fast-xml-parser";
44

55
async function getDecisionNames(dmnXmlString) {
66
try {
7-
const result = await parseStringPromise(dmnXmlString, {
8-
explicitArray: false,
9-
tagNameProcessors: [(name) => name.replace(/^.*:/, "")], // remove namespace prefixes
7+
const parser = new XMLParser({
8+
ignoreAttributes: false,
9+
attributeNamePrefix: "@_",
10+
removeNamespace: true, // This removes namespace prefixes
1011
});
1112

12-
// Now 'definitions' and 'decision' keys are accessible without prefixes
13-
const definitions = result.definitions;
13+
const result = parser.parse(dmnXmlString);
14+
console.log(result);
15+
const definitions = result["dmn:definitions"];
1416
if (!definitions) return [];
1517

16-
let decisions = definitions.decision || [];
18+
let decisions = definitions["dmn:decision"] || [];
1719
if (!Array.isArray(decisions)) decisions = [decisions];
1820

19-
const decisionNames = decisions.map((d) => d.$.name);
21+
console.log("decisions");
22+
console.log(decisions);
23+
24+
const decisionNames = decisions
25+
.map((d) => d["@_name"])
26+
.filter((name) => name); // Filter out undefined names
27+
console.log("decision names");
28+
console.log(decisionNames);
2029
return decisionNames;
2130
} catch (err) {
2231
console.error("Error parsing DMN XML:", err);

0 commit comments

Comments
 (0)