无需会员将有道云笔记脑图转换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导出成各种格式文件。
无需会员将有道云笔记脑图转换xmind的更多相关文章
- 有道云笔记配合MPic+七牛云 自制MarkDown文档图床(适用Typora)
注:从有道云笔记v6.5开始,有道云笔记会员可以使用MarkDown有道自带的图床.(但是非会员可以采用下面的七牛云图床+MarkDown方法) 0x00 前言 一直用有道云笔记,粘贴图片,做笔记没问 ...
- 无需脑图 无需思维导图 看Word大纲视图
大纲视图可以帮助我们大纲视图可帮助您管理文档的结构和标题,就像现在的脑图,经过我的使用后,可以说Word的分级功能非常强大,只恨当时理解的不够,误会了Word. 当我们决定写一个文档的时候,第一步 ...
- 有道云笔记新功能发现——有道云笔记剪报,完美解决不开会员保存csdn博客到本地的问题。
怎么用 方法一:谷歌插件 方法二:http://note.youdao.com/web-clipper-chrome.html 添加到书签 功能: 能够把网页浏览的内容保存到有道云笔记 解决了自己的难 ...
- 有道云笔记 - Markdown模板(文首附markdown源码,即.md文件)
有道云笔记 - Markdown模板 附 本文的Markdown源码镜像: https://github.com/yanglr/AlgoSolutions/blob/master/Youdao_Not ...
- 有道云笔记Markdown上传本地图片的方法
有道云笔记截图&保存 方法有多种,例如:开通有道云笔记VIP会员.先将图片文件上传到有道云笔记后使用图片的分享链接.说到底还是使用的 Markdown 的图片功能 ![图片名称](图片链接 ...
- [转]有道云笔记markdown
作为半个文字工作者,一天当中,一半时间用在遣词造句,一半时间则在死磕排版.当听说“前所未有的极简语法”Markdown,不仅能简化排版.大大提高书写效率,而且上手零门槛.好奇宝宝怎么忍得住一颗蠢蠢欲动 ...
- [简明版] 有道云笔记Markdown指南
使用有道词典配合Markdown,可以快速准确做出美观精致的笔记,下面我们来看一下如何使用有道词典的MarkDown功能. 什么是Markdown?Markdown是一种轻量级的「标记语言」,通常为程 ...
- 使用有道云笔记还是github写笔记的优缺点对比
有道云笔记的优点 在手机上编辑笔记,有道云的体验更好,建议:新建普通类型笔记而不是markdown笔记,因为md在手机上的编辑体验并不好 插入图片方便无需考虑图床 可以把笔记分享到社交平台(QQ,微信 ...
- naotu.baidu.com 非常棒的脑图在线工具
1.png 2.txt 短租 前台功能 房源查看 房源搜索 城市房源 注册登录 预定房源 房源退订 在线支付 评价房源 个人中心 我的订单 我的账户 我的收藏 消息通知 管理员后台 房源发布 会员管理 ...
随机推荐
- 手写一个LRU工具类
LRU概述 LRU算法,即最近最少使用算法.其使用场景非常广泛,像我们日常用的手机的后台应用展示,软件的复制粘贴板等. 本文将基于算法思想手写一个具有LRU算法功能的Java工具类. 结构设计 在插入 ...
- VS2010编写32位和64位dll环境配置,以及判断dll是多少位
前言 最近在编写dll注入程序的时候,因为想注入到系统进程,结果发现总是注入失败.自闭了好长一会发现我忘记了我的系统是64位的,系统进程也是64位的,而我编写的待注入的DLL是32位了,所以才导致失败 ...
- Spring 中使用了那些设计模式呢?
一. Spring 中常见的设计模式 工厂模式 : BeanFactory 装饰器模式: BeanWrapper 代理模式: AopProxy 单例模式: ApplicationContext 委派模 ...
- [刷题] 237 Delete Nodes in a Linked List
要求 给定链表中的一个节点,删除该节点 思路 通过改变节点的值实现 实现 1 struct ListNode { 2 int val; 3 ListNode *next; 4 ListNode(in ...
- [tools] 工具
代码编辑 notepad++ 文档对比 Beyond Compare 代码阅读 source insight 代码分析 Scitools 下载 http://www.cr173.com/soft/29 ...
- MySQL给某个用户给某个库表设置权限
-- 用root(最高权限的用户)进行以下操作-- 创建数据库:emc_power CREATE DATABASE emc_power DEFAULT CHARACTER SET utf8 COLLA ...
- groovy脚本语言基础1
一 搭建groovy环境 安装JDK [root@node1 ~]# yum -y install java-11-openjdk 官网下载groovySDK下载 https://groovy.ap ...
- Scala 中的可变(var)与不可变(val)
引言 Scala 中定义变量分为 var(可变变量)和 val(不可变变量) Scala 中集合框架也分为可变集合和不可变集合.比如 List(列表) 和 Tuple(元组)本身就是不可变的,set ...
- 抓住异步编程async/await语法糖的牛鼻子: SynchronizationContext
长话短说,本文带大家抓住异步编程async/await语法糖的牛鼻子: SynchronizationContext 引言 C#异步编程语法糖async/await,使开发者很容易就能编写异步代码. ...
- Apache Jena Fuseki使用
下载Apache Jena Fuseki 先从apache官网下载fuseki压缩包.然后解压到目标文件夹. apache官网:http://jena.apache.org/download/ 这里我 ...