根據 XML 格式數據繪製類似組織架構圖的樹狀結構,需計算各層級節點坐標位置。
無需造輪子,D3 提供成熟的 d3.tree()、d3.hierarchy() 佈局引擎。
DOMParser 或後端轉換。
const parser = new DOMParser();
const xmlDoc = parser.parseFromString(xmlString, "text/xml");
const jsonData = xmlToJson(xmlDoc.documentElement);
const root = d3.hierarchy(jsonData, d => d.children);
const treeLayout = d3.tree().size([width, height]);
treeLayout(root); // 節點獲得 x, y, depth 等屬性
Mike Bostock 的可縮放樹圖示例(JSON 數據,XML 易轉換)。
| 方案 | 優點 | 缺點 |
|---|---|---|
| D3.js (SVG) | 交互豐富、生態成熟、聲明式 | 大數據(>2000節點)性能弱 |
| Canvas + D3 佈局 | 高性能渲染 | 需手動處理拾取/交互 |
| ECharts Graph | 配置式、國產文檔友好 | 樹佈局自定義受限 |
| 原生 Canvas 遞歸繪製 | 完全可控 | 開發成本高、易出 Bug |
結論:數據轉 JSON → D3 佈局 → SVG/Canvas 渲染 是性價比最高的路徑。