基于Go语言的xmind读写库,我主要用来把有道云笔记思维导图转为xmind

xmind

基于go语言的xmind接口

本库主要加载xmind文件为json结构,保存文件时也用的json结构而不是xml结构

本库只做了最基本的主题添加功能,类似 标签/备注/图片等其他功能不考虑,有想法的自行实现

本库做了通用加载和通用保存方法,可以更灵活的与其他思维导图进行转换

  • 自定义json数据创建xmind
package main

import (
    "github.com/jan-bar/xmind"
)

func main() {
    data := [{"a":"1","b":"main topic"},
{"a":"2","b":"topic1","c":"1"},{"a":"3","b":"topic2","c":"1"},
{"a":"4","b":"topic3","c":"2"},{"a":"5","b":"topic4","c":"2"},
{"a":"6","b":"topic5","c":"3"},{"a":"7","b":"topic6","c":"3"}
]
    // 这里定义 a 表示节点id, b 表示主题内容, c 表示父节点id
    // 传入定好的json字符串,以及指定好json的key字符串就可以将任意json数据转换成xmind
    // 也可用用 data := []byte({}) 传入字节数组
    st, err := xmind.LoadCustom(data, "a", "b", "c")
    if err != nil {
        panic(err)
    }
    err = xmind.SaveSheets("custom.xmind", st)
    if err != nil {
        panic(err)
    }
}
  • 通过接口创建xmind对象,并保存xmind文件
package main

import (
    "github.com/jan-bar/xmind"
)

func main() {
    st1 := xmind.NewSheet("sheet1", "main 1 topic")
    st1.Add("123").Add("456").Add("789").OnTitle("123").
        Add("2sc").Add("345").OnTitle("456").
        Add("xzcv").Add("ewr").OnTitle("789").Add("saf").Add("xcv")

    st2 := xmind.NewSheet("sheet2", "main 2 topic")
    st2.Add("aaa").Add("ewr")
    st2.OnTitle("ewr").Title = "xx-ewr\txvf\nwer" // 修改指定主题内容,其中包含特殊转义字符
    st2.Add("cvxcv").Add("wqerwe").OnTitle("aaa").
        Add("zxs", xmind.ParentMode). // 为节点添加父节点
        Add("cxv", xmind.BeforeMode). // 在节点之前添加兄弟节点
        Add("xcas", xmind.AfterMode). // 在节点之后添加兄弟节点
        OnTitle("cvxcv").Add("34").Add("xcv")

    err := xmind.SaveSheets("create.xmind", st1, st2)
    if err != nil {
        panic(err)
    }
}
  • 加载xmind文件
package main

import (
    "github.com/jan-bar/xmind"
)

func main() {
    // 支持4种方式的加载,详情看内部具体实现
    wb, err := xmind.LoadFile("TestCreateXmind.xmind")
    if err != nil {
        panic(err)
    }
    if len(wb.Topics) != 2 {
        return
    }

    // 在第一个sheet页修改一些数据
    wb.Topics[0].OnTitle("345").Add("111").Add("222").OnTitle("xcv").
        Add("xzcv").Add("werw")

    // 在第二个sheet页修改一些数据
    wb.Topics[1].OnTitle("34").Add("111").Add("222").OnTitle("aaa").
        Add("xzcv").Add("werw")

    // 可以用xmind打开这两个文件,比较一下不同
    err = wb.Save("TestLoadXmindJson.xmind")
    if err != nil {
        panic(err)
    }
}

Original: https://www.cnblogs.com/janbar/p/16607722.html
Author: janbar
Title: 基于Go语言的xmind读写库,我主要用来把有道云笔记思维导图转为xmind

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/516213/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • go微服务框架Kratos笔记(四)使用nacos作为远端配置中心

    初识nacos nacos是阿里开源的一款用于动态服务发现、配置管理和服务管理的平台。 官方介绍,Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特…

    Go语言 2023年5月25日
    087
  • Go语言之结构体与方法

    结构体是一系列属性的集合(类似于 Python 中的类) 1、结构体的定义与使用 // 定义 type Person struct { Name string Age int Se…

    Go语言 2023年5月25日
    072
  • 基于LSM的Key-Value数据库实现WAL篇

    上篇文章简单的实现了基于LSM数据库的初步版本,在该版本中如数据写入到内存表后但还未持久化到SSTable排序字符串表,此时正好程序崩溃,内存表中暂未持久化的数据将会丢失。 引入W…

    Go语言 2023年5月25日
    065
  • golang低级编程:一.unsafe包

    go语言在设计上确保了一些安全的属性,限制了程序可能出错的途径。例如严格的类型转换规则。但也使得很多实现的细节无法通过go程序来访问,例如对于聚合类型(如结构体)的内存布局,或者一…

    Go语言 2023年5月25日
    051
  • 将百度万年历存入自己的数据库

    前言 最近有需要研究阴历和阳历互相转换的问题。因此找到两个库carbon和solarlunar但是感觉计算出来的总是不太放心,而且也会占用计算资源。我的想法是通过接口获取现成的阴历…

    Go语言 2023年5月25日
    070
  • GO的URL合法性检查

    原文连接:https://www.zhoubotong.site/post/67.html Go 标准库的net/url包提供的两个函可以直接检查URL合法性,不需要手动去正则匹配…

    Go语言 2023年5月25日
    085
  • go微服务框架Kratos笔记(二)引入zap日志库

    zap日志库是一款高性能的开源日志库,提供了结构化日志记录和printf风格的日志记录 go get -u go.uber.org/zap 参考官方文档中描述,为了方便业务自适配不…

    Go语言 2023年5月25日
    062
  • Golang:手撸一个支持六个级别的日志库

    Golang标准日志库提供的日志输出方法有Print、Fatal、Panic等,没有常见的Debug、Info、Error等日志级别,用起来不太顺手。这篇文章就来手撸一个自己的日志…

    Go语言 2023年5月25日
    073
  • go程序添加远程调用tcpdump功能

    最近开发的telemetry采集系统上线了。听起来高大上,简单来说就是一个grpc/udp服务端,用户的机器(路由器、交换机)将它们的各种统计数据上报采集、整理后交后端的各类AI分…

    Go语言 2023年5月25日
    070
  • Sentinel-Go 源码系列(三)滑动时间窗口算法的工程实现

    要说现在工程师最重要的能力,我觉得工程能力要排第一。 就算现在大厂面试经常要手撕算法,也是更偏向考查代码工程实现的能力,之前在群里看到这样的图片,就觉得很离谱。 算法与工程实现 在…

    Go语言 2023年5月25日
    057
  • 为开源项目 go-gin-api 增加后台任务模块

    任务管理界面 (WEB) 任务调度器 任务执行器 小结 推荐阅读 任务管理界面 (WEB) 支持在 WEB 界面 中对任务进行管理,例如…

    Go语言 2023年5月25日
    0114
  • Golang通脉之指针

    指针的概念 指针是存储另一个变量的内存地址的变量。 变量是一种使用方便的占位符,用于引用计算机内存地址。 一个指针变量可以指向任何一个值的内存地址。 在上面的图中,变量b的值为15…

    Go语言 2023年5月25日
    079
  • go-micro集成链路跟踪的方法和中间件原理

    前几天有个同学想了解下如何在go-micro中做链路跟踪,这几天正好看到wrapper这块,wrapper这个东西在某些框架中也称为中间件,里边有个opentracing的插件,正…

    Go语言 2023年5月25日
    066
  • 为什么要避免在 Go 中使用 ioutil.ReadAll?

    原文链接: 为什么要避免在 Go 中使用 ioutil.ReadAll? ioutil.ReadAll 主要的作用是从一个 io.Reader 中读取所有数据,直到结尾。 在 Gi…

    Go语言 2023年5月25日
    059
  • Go – 如何编写 ProtoBuf 插件 (三) ?

    上篇文章《Go – 如何编写 ProtoBuf 插件 (二) 》,分享了基于 自定义&#x90…

    Go语言 2023年5月25日
    069
  • Go 的 golang.org/x/ 系列包和标准库包有什么区别?

    在开发过程中可能会遇到这样的情况,有一些包是引入自不同地方的,比如: golang.org/x/net/html 和 net/html, golang.org/x/crypto 和…

    Go语言 2023年5月25日
    072
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球