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; }