Xmind格式转Markdown

记录一下小工具制作过程。

缘起

虽然之前做过一个百度脑图转markdown的工具,但在工作中,xmind软件使用居多。而xmind如果想要将思维导图导出为markdown。那是需要钱钱的。。。

所以有了自己写一个将xmind文件转为markdown文件的想法。当然markdown这是一个中转格式,当xmind转为markdown后,可以使用pandoc(pandoc地址)软件将markdown转为work,pdf等格式。

废话不多说,开始正题。

xmind文件格式

使用二进制查看器,查看xmind格式文件内容

发现文件以50 4B 03 04开头,这表示文件xmind文件是一个压缩文件。

试探性的使用压缩软件打开xmind文件,发现可以被解压。

且目录结构如下:

xmind中思维导图的主要文本数据存放在content.json中。所以我们主要解析content.json就可以了。

解析content.json

这块的解析无非就是json类型的树状结构,然后将其映射到markdown对于的格式上,没啥好说的,直接上代码。

/**
 * 递归遍历节点
 */
function traverse(context, node, level) {
  if (!node) {
    return
  }

  if (node.title) {
    let prefix = signMultiplication('#', level)
    let title = `${prefix} ${node.title}\n\n`
    console.log(title)
    myWrite(context, title)
  }

  if (node.notes && node.notes.plain.content) {
    let content = `${node.notes.plain.content}\n\n`
    console.log(content)
    myWrite(context, content)

  }

  if (node.image) {
    let src = node.image.src.slice(4)
    let imageTitle = node.title || "default"
    let imageDir = `${context.name}.attachment`
    let imageName = src.slice(src.lastIndexOf("/") + 1)
    let newImageSrc = `${imageDir}/${imageName}`
    if (!fs.existsSync(imageDir)) {
      fs.mkdirSync(imageDir, { recursive: true })
    }
    let realSrc = path.join(context.baseDir, src)
    if (!fs.existsSync(newImageSrc)) {
      fs.copyFileSync(realSrc, newImageSrc)
    }
    let content = `![${imageTitle}](${newImageSrc})`
    console.log(content)
    myWrite(context, content)
  }

  if (node.children && node.children.attached && node.children.attached.length > 0) {
    let children = node.children.attached
    for (let child of children) {
      traverse(context, child, level + 1)
    }
  }
}

/**
 * 符号乘法
 */
function signMultiplication(sign, n) {
  let result = ''
  for (let i = 0; i < n; i++) {
    result += sign
  }
  return result
}

程序结果

使用该脚本转换xmind的效果:

原xmind图:

转换后的markdown文档

后续会将脑图转markdown和xmind转markdown的源码放致github上

附录

源码地址:GitHub - PZh101/to-markdown: to markdown

  • 10
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值