• 无需会员将有道云笔记脑图转换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导出成各种格式文件。

    作者:janbar
    本文版权归作者和博客园所有,欢迎转载,转载请标明出处。喜欢我的文章请 [关注我] 吧。
    如果您觉得本篇博文对您有所收获,可点击 [推荐] [收藏] ,或到右侧 [打赏] 里请我喝杯咖啡,非常感谢。
  • 相关阅读:
    ArcGIS Pro二次开发-在地图上插入一个点
    ArcGIS Pro二次开发-获得所有图层
    ArcGIS Pro二次开发-识别工具
    ArcGIS Pro二次开发-放大缩小工具
    ArcGIS Pro二次开发-选择工具
    ArcGIS Pro二次开发计算一个面层的总面积
    arcgis pro二次开发官方文档
    已禁用对分布式事务管理器(MSDTC)的网络访问。请使用组件服务管理工具启用 DTC 以便在 MSDTC 安全配置中进行网络访问。
    Windows把内存变成快速虚拟硬盘
    Ramdisk虚拟内存盘,Swap分区
  • 原文地址:https://www.cnblogs.com/janbar/p/14922975.html
Copyright © 2020-2023  润新知