A implementation for *X-tree Diff +: An Efficient Change Detection Algorithm for Tree-structured Data*
npm install @dovyih/x-tree-diff-plusX-Tree Diff+ alogrithm. PDF
| property | description |
| --- | --- |
| id | node id |
| label | Node Label |
| type | Node Type. Text or Element |
| value | Text Node value |
| index | Node index |
| nMD | node message digest |
| tMD | tree mssage digest |
| iMD | node Id message digest, uniquely identify each node |
| nPtr | node pointer to matched node |
| Op | edit operation |
| data | extra data field, you can assign origin Node here |
You need implement XTreeDiffPlus#buildTree and XTreeDiffPlus#dumpTree first.
Like this:
``ts
import { XTreeDiffPlus, XTree } from '@dovyih/x-tree-diff-plus';
class DefaultXTreeDiff extends XTreeDiffPlus
public buildXTree(tree: XTree) {
return tree;
}
public dumpXTree(oldTree: XTree
return { oldTree, newTree };
}
}
//
//
//
//
const tree1 = new XTree
label: 'A',
type: NodeType.ELEMENT,
index: 1,
id: 'a1',
data: 'tree2-level-1-a-1',
children: [
new XTree
label: 'B',
type: NodeType.ELEMENT,
index: 1,
id: 'b1',
data: 'tree2-level-2-b-1',
}),
new XTree
label: 'B',
type: NodeType.ELEMENT,
index: 2,
id: 'b2',
data: 'tree2-level-2-b-2',
}),
],
});
//
//
//
//
const tree2 = new XTree
label: 'A',
type: NodeType.ELEMENT,
index: 1,
id: 'a1',
data: 'tree2-level-1-a-1',
children: [
new XTree
label: 'B',
type: NodeType.ELEMENT,
index: 1,
id: 'b1',
data: 'tree2-level-2-b-1',
}),
new XTree
label: 'C',
type: NodeType.ELEMENT,
index: 2,
id: 'c2',
data: 'tree2-level-2-b-2',
}),
],
});
}
new DefaultXTreeDiff(tree1, tree2).diff();
// result:
//
//
//
//
//
//
//
//
//
//
``