無需會員將有道雲筆記腦圖轉換xmind


我的煩惱

有道雲筆記有腦圖功能,我平時經常用到,之所以很少用到其他腦圖工具,是因為我一直用有道雲筆記寫筆記。因此編輯腦圖和查看腦圖比較方便,但是需要將腦圖導出的時候目前只支持圖片和xmind,但是需要開會員,由於囊中羞澀,所以我想了別的方案。

解決方案

我找到xmind的官方GitHub:
https://github.com/xmindltd,找到了python的SDK,看了下有python和java以及js這三個sdk,但是Java和python的sdk已經不維護了,不過還是可以用的,就是新功能可能用不了。

找到了生成xmind的方法,但是如何將有道雲筆記腦圖的源文件拿到呢?還得分析一下源文件格式,寫寫算法去進行轉換。之前導出過有道雲筆記,知道好多文件都是明文保存,沒有加密啥的,因此我用everything搜索了我的文件名,還真找到了辦法。如下圖所示,就是我找到的文件名,然后通過文件搜索工具搜到了源文件位置。

下面是我的思維導圖的源文件,用文本方式打開,發現就是一個簡單的json格式。

下面就是json內容,實際就是每個節點都有父節點id,根節點沒有父節點,每個節點組成一個數組,這種格式處理最好用的就是遞歸的方法。

{
    "nodes": [
        {
            "id": "root",
            "isroot": true,
            "topic": "測試腦圖",
            "customStyle": {
                "fontFamily": [
                    "Microsoft YaHei",
                    "STXihei"
                ]
            },
            "link": null,
            "expanded": true,
            "parentid": null,
            "style": {}
        },
        {
            "id": "a231f89912e42e5b",
            "topic": "分支主題1",
            "customStyle": {
                "fontFamily": [
                    "Microsoft YaHei",
                    "STXihei"
                ],
                "borderColor": "#4D94FF"
            },
            "expanded": true,
            "parentid": "root",
            "style": {}
        }
    ],
    "readOnly": false,
    "toolbar": {
        "lineType": "default",
        "strategy": "logic_right",
        "zoom": 1,
        "loading": true,
        "borderColor": "#4D94FF"
    },
    "remarks": {},
    "version": "2.0",
    "resourceList": ""
}

動手操作

我的所有代碼都放到GitHub:
https://github.com/jan-bar/mindmap_to_xmind,如果有興趣,可以去看看,核心代碼如下,沒有太復雜的東東。

import json
import xmind
import sys
import os

def convert_mindmap_xmind(input_file, save_file):
    data_dict = {}  # 將節點保存到字典中
    with open(input_file, 'r', encoding='utf-8') as f:
        json_data = json.load(f)
        for node in json_data['nodes']:
            data_dict[node['id']] = {
                'id': node['id'],
                'parentid': node['parentid'],
                'topic': node['topic'],
                'sub_topic': {},
            }

    data_root = None
    for val in data_dict.values():
        if val['id'] == 'root':
            data_root = val  # 保存根節點
        elif n := data_dict.get(val['parentid']):
            # 當前節點掛到父節點下
            n['sub_topic'][val['id']] = val
    if data_root is None:
        print('數據有誤,沒有找到根節點')
        return
    # print(json.dumps(data_root))  # 可以打印看看結果

    if os.path.exists(save_file):
        os.remove(save_file)  # 目標文件存在則刪除

    mind = xmind.load(save_file)
    sheet1 = mind.getPrimarySheet()
    # 獲取sheet並設置名稱為輸入文件名
    sheet1.setTitle(os.path.basename(input_file))
    root1 = sheet1.getRootTopic()
    # 設置屬性為: 邏輯圖(向右), 和有道雲筆記保持一致
    root1.setAttribute('structure-class', 'org.xmind.ui.logic.right')

    def set_topic(root, val_data):
        root.setTitle(val_data['topic'])
        for sub_val in val_data['sub_topic'].values():
            set_topic(root.addSubTopic(), sub_val)
    set_topic(root1, data_root)  # 遞歸設置子節點

    xmind.save(mind, save_file)


if __name__ == '__main__':
    if len(sys.argv) != 3:
        print(f'usage: {sys.argv[0]} input.mindmap save.xmind')
        exit(0)
    convert_mindmap_xmind(sys.argv[1], sys.argv[2])

最終效果,上面那個有道雲筆記的結構完美轉換為下面的xmind,然后就可以通過xmind導出成各種格式,滿足大家的所有需求了。

總結

生活中有很多技巧都需要我們去發現,並找到解決方案。想一想自己的需求是不是大家的需求,如果是那就有解決的價值。反正我有了這個方案就可以放心地在有道雲筆記上寫腦圖了。如果需要發布給其他人看,就通過我的這個項目導出成xmind,然后通過xmind導出成各種格式文件。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM