Mind Mapツールの一つであるXMindのPython SDKを使ってみたメモです。
XMind
XMind Python SDK
Python2.x
https://github.com/xmindltd/xmind-sdk-python
Python3.x
https://github.com/jmoraleda/xmind-sdk-python3
SDK 使い方
ここではPython3を使います。
ファイル作成
新規ファイルの作成
# !/usr/bin/env python3
from xmind import save
from xmind.core.workbook import WorkbookDocument
if __name__ == "__main__":
"""
空のファイルを作成
"""
# xmindのWorkBookを作成
wb = WorkbookDocument("", "./example.xmind")
# xmindのファイルを保存
save(wb)
または load
メソッドを使います。
# !/usr/bin/env python3
from xmind import load, save
from xmind.core.workbook import WorkbookDocument
if __name__ == "__main__":
"""
空のファイルを作成
"""
# xmindのWorkBookを作成
wb = load("./example.xmind")
# xmindのファイルを保存
save(wb)
WorkSheet名を設定
# !/usr/bin/env python3
from xmind import save
from xmind.core.workbook import WorkbookDocument
if __name__ == "__main__":
"""
WorkSheet作成
"""
# xmindのWorkBookを作成
wb = WorkbookDocument("", "./example.xmind")
# WorkSheetを作成
ws = wb.getPrimarySheet()
ws.setTitle("WorkSheet1")
# xmindのファイルを保存
save(wb)
root topic取得
# !/usr/bin/env python3
from xmind import save
from xmind.core.workbook import WorkbookDocument
if __name__ == "__main__":
"""
root topicを取得
"""
# xmindのWorkBookを作成
wb = WorkbookDocument("", "./example.xmind")
# WorkSheetを作成
ws = wb.getPrimarySheet()
ws.setTitle("WorkSheet1")
# WorkSheetのRoot Topicを取得してタイトルをセット
rt = ws.getRootTopic()
rt.setTitle("root topic")
# xmindのファイルを保存
save(wb)
root topicにsub topicを追加
# !/usr/bin/env python3
from xmind import save
from xmind.core.workbook import WorkbookDocument
if __name__ == "__main__":
"""
root topicにsub topicを追加
"""
# xmindのWorkBookを作成
wb = WorkbookDocument("", "./example.xmind")
# WorkSheetを作成
ws = wb.getPrimarySheet()
ws.setTitle("WorkSheet1")
# WorkSheetのRoot Topicを取得してタイトルをセット
rt = ws.getRootTopic()
rt.setTitle("root topic")
# Root TopicにSub Topicを追加
rt.addSubTopic().setTitle("sub topic1")
# xmindのファイルを保存
save(wb)
複数のsub topicを追加したい場合は rt
オブジェクトに連続して追加します。
(snip)
# Root TopicにSub Topicを追加
rt.addSubTopic().setTitle("sub topic1")
rt.addSubTopic().setTitle("sub topic2")
(snip)
topicの階層
# !/usr/bin/env python3
from xmind import save
from xmind.core.workbook import WorkbookDocument
if __name__ == "__main__":
"""
sub topicの配下に新しいtopicを追加する
image: root topic --- sub topic1 --- sub topic3
|
- sub topic2
"""
# xmindのWorkBookを作成
wb = WorkbookDocument("", "./example.xmind")
# WorkSheetを作成
ws = wb.getPrimarySheet()
ws.setTitle("WorkSheet1")
# WorkSheetのRoot Topicを取得してタイトルをセット
rt = ws.getRootTopic()
rt.setTitle("root topic")
# Root TopicにSub Topicを追加
rt.addSubTopic().setTitle("sub topic1")
rt.addSubTopic().setTitle("sub topic2")
# sub topicのindexを取得
topic_index = {}
for t in rt.getSubTopics():
topic_index[t.getTitle()] = t.getIndex()
# sub topic1配下にtopicを追加
rt.getSubTopicByIndex(index=topic_index['sub topic1']).addSubTopic().setTitle("sub topic3")
# xmindのファイルを保存
save(wb)
sub topic3
配下にtopicを追加する例
# !/usr/bin/env python3
from xmind import save
from xmind.core.workbook import WorkbookDocument
if __name__ == "__main__":
"""
sub topicの配下に新しいtopicを追加する
image: root topic --- sub topic1 --- sub topic3 ---- sub topic4
|
- sub topic2
"""
# xmindのWorkBookを作成
wb = WorkbookDocument("", "./example.xmind")
# WorkSheetを作成
ws = wb.getPrimarySheet()
ws.setTitle("WorkSheet1")
# WorkSheetのRoot Topicを取得してタイトルをセット
rt = ws.getRootTopic()
rt.setTitle("root topic")
# Root TopicにSub Topicを追加
rt.addSubTopic().setTitle("sub topic1")
rt.addSubTopic().setTitle("sub topic2")
# sub topicのindexを取得
topic_index = {}
for t in rt.getSubTopics():
topic_index[t.getTitle()] = t.getIndex()
# sub topic1配下にtopicを追加
rt.getSubTopicByIndex(index=topic_index['sub topic1']).addSubTopic().setTitle("sub topic3")
# sub topic3配下にtopicを追加する例
for t in rt.getSubTopics():
if(t.getTitle() == "sub topic1"):
for st in t.getSubTopics():
st.addSubTopic().setTitle("sub topic4")
# xmindのファイルを保存
save(wb)
ファイル読み込み
ファイルの読み込み
# !/usr/bin/env python3
from xmind import load, save
if __name__ == "__main__":
"""
XMindのファイルを読み込む
"""
# xmindのWorkBookを作成
wb = load("./example.xmind")
# WorkSheetを取得
ws = wb.getPrimarySheet()
# WorkSheetのRoot Topicを取得
rt = ws.getRootTopic()
# sub topicを表示
for topic in rt.getSubTopics():
print(topic.getTitle())
読み込むWorkSheetを指定
# !/usr/bin/env python3
from xmind import load, save
if __name__ == "__main__":
"""
読み込むWorkSheetを指定する
"""
# xmindのWorkBookを作成
wb = load("./example.xmind")
# 複数あるWorkSheetを取得
wss = wb.getSheets()
# `シート 2` を指定する
for ws in wss:
if(ws.getTitle() == "シート 2"):
ws = ws
break
# WorkSheetのRoot Topicを取得してタイトルをセット
rt = ws.getRootTopic()
# sub topicを表示
for topic in rt.getSubTopics():
print(topic.getTitle())
既存のファイルにtopicを追加
以下のマップの a-d
に p
を追加してみます。
# !/usr/bin/env python3
from xmind import load, save
def getAlltopic(topics, allTopics):
"""
XMindのtopicのtitleをキーにしてtopicのオブジェクトを返す辞書を作成する
:type topics: list
:param topics: XMindのtopicオブジェクトリスト
:type allTopics: dict
:param allTopics: topicのオブジェクトを保存する辞書
:rtype: dict
:return: topicのtitleをキーにしてtopicのオブジェクトを返す辞書
"""
for topic in topics:
allTopics[topic.getTitle()] = topic
if(len(topic.getSubTopics()) > 0):
getAlltopic(topic.getSubTopics(), allTopics)
return allTopics
if __name__ == "__main__":
"""
既存のtopicに追加する
ただし、このやり方はtopicのtitleが被らないことが前提
"""
# XMindのファイルを読み込む
wb = load("./example.xmind")
# WorkSheetを取得
ws = wb.getPrimarySheet()
# Root Topicを取得
rt = ws.getRootTopic()
# 全topicのindexを取得
allTopics = {}
r = getAlltopic(rt.getSubTopics(), allTopics)
# root topic - a - d に `p` を追加する
r['d'].addSubTopic().setTitle("p")
# xmindのファイルを保存
save(wb)
別名でファイルを保存
# !/usr/bin/env python3
from xmind import load, save
if __name__ == "__main__":
"""
別名で保存する
"""
# xmindのWorkBookを作成
wb = load("./example.xmind")
# 複数あるWorkSheetを取得
wss = wb.getSheets()
# `シート 2` を指定する
for ws in wss:
if(ws.getTitle() == "シート 2"):
ws = ws
break
# WorkSheetのRoot Topicを取得してタイトルをセット
rt = ws.getRootTopic()
# sub topicを追加
rt.addSubTopic().setTitle("b")
# 別名保存
save(wb, "./hoge.xmind")
参考
https://github.com/xmindltd/xmind-sdk-python/blob/master/example.py