12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 |
- export default function getNodeSequence(xmlObj) {
- if (!xmlObj.childNodes[0].childNodes[0]) return [];
- let nodeList = Array.from(xmlObj.childNodes[0].childNodes[0].childNodes)
- let res = [];
- let startNode = nodeList.find((item) => item.tagName == 'bpmn:startEvent');
- if (!startNode) {
- console.log('缺少开始节点');
- return;
- }
- let nextNodeId = getNodeId(startNode, true, nodeList);
- res.push({
- nodeId: startNode.id,
- preNodeId: null,
- nextNodeId: nextNodeId,
- })
- while (nextNodeId) {
- if (!nextNodeId) break
- let currentId = nextNodeId;
- let currentNode = nodeList.find(item => item.id == currentId);
- nextNodeId = getNodeId(currentNode, true, nodeList);
- let preNodeId = getNodeId(currentNode, false, nodeList);
- res.push(
- {
- nodeId: currentId,
- preNodeId,
- nextNodeId,
- }
- )
- }
- console.log(res);
- return res
- }
- /**
- *
- * @param {节点} node
- * @param {true:下一个节点的id;false:上一个节点的id} flag
- * @returns
- */
- const getNodeId = (node, flag, nodeList) => {
- let theTagName = flag ? 'bpmn:outgoing' : 'bpmn:incoming';
- let childNodeList = Array.from(node.childNodes);
- let FlowId = childNodeList.find(item => item.tagName == theTagName)?.firstChild?.data;//找到指入或指出箭头节点
- if (!FlowId) return false;
- let targetId = nodeList.find(item => item.id == FlowId)?.getAttribute(flag ? 'targetRef' : 'sourceRef')
- if (!targetId) return false;
- return targetId;
- }
|