LoginSignup
9
13

More than 5 years have passed since last update.

XMindのpython SDKの使い方メモ

Last updated at Posted at 2017-12-30

Mind Mapツールの一つであるXMindのPython SDKを使ってみたメモです。

XMind

http://jp.xmind.net

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-dp を追加してみます。

スクリーンショット 2018-01-02 17.09.36.png

#!/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

9
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
13