• Python 使用Python操作xmind文件


    使用Python操作xmind文件

    by:授客 QQ1033553122

     

     

    测试环境

    Win10

    Python 3.5.4

    XMind-1.2.0.tar.gz

    下载地址:

    https://files.pythonhosted.org/packages/7c/8c/e13a82fa9b0394c0d58248196d7d51d7274407cdebc1df36b76034ab990d/XMind-1.2.0.tar.gz

     

    创建及更新xmind文件

    #!/usr/bin/env python

    # -*- coding:utf-8 -*-

     

    import xmind

    from xmind.core.const import TOPIC_DETACHED

    from xmind.core.markerref import MarkerId

    from xmind.core.topic import TopicElement

     

    # 加载已有xmind文件,如果不存在,则新建

    workbook = xmind.load('D:\example\example.xmind')

     

    first_sheet = workbook.getPrimarySheet()  # 获取第一个画布

    first_sheet.setTitle('First Sheet')   # 设置画布名称

    root_topic1 = first_sheet.getRootTopic()  # 获取画布中心主题,默认创建画布时会新建一个空白中心主题

    root_topic1.setTitle('Example Topic')   # 设置主题名称

     

     

     

    sub_topic1 = root_topic1.addSubTopic() # 创建子主题,并设置名称

    sub_topic1.setTitle("first sub topic")

     

    sub_topic2 = root_topic1.addSubTopic()

    sub_topic2.setTitle("second sub topic")

     

    sub_topic3 = root_topic1.addSubTopic()

    sub_topic3.setTitle("third sub topic")

     

    # 除了新建子主题,还可以创建自由主题(注意:只有中心主题支持创建自由主题)

    detached_topic1 = root_topic1.addSubTopic(topics_type=TOPIC_DETACHED)

    detached_topic1.setTitle("detached topic")

    detached_topic1.setPosition(0, 30)

     

    # 创建一个子主题的子主题

    sub_topic1_1 = sub_topic1.addSubTopic()

    sub_topic1_1.setTitle("I'm a sub topic too")

     

    second_sheet = workbook.createSheet()   # 创建新画布

    second_sheet.setTitle('Second Sheet')

    root_topic2 = second_sheet.getRootTopic()

    root_topic2.setTitle('Root Node')

     

    # 使用其它方式创建子主题元素

    topic1 = TopicElement(ownerWorkbook=workbook)

    topic1.setTopicHyperlink(first_sheet.getID()) # 为画布创建一个来自第一个画布的主题链接

    topic1.setTitle("redirection to the first sheet")

     

    topic2 = TopicElement(ownerWorkbook=workbook)

    topic2.setTitle("topic with an url hyperlink")

    topic2.setURLHyperlink("https://www.cnblogs.com/shouke"# 为子主题元素设置URL超链接

     

    topic3 = TopicElement(ownerWorkbook=workbook)

    topic3.setTitle("third node")

    topic3.setPlainNotes("notes for this topic"# 为子主题设置备注 (F4 in XMind)

    topic3.setTitle("topic with notes")

     

    topic4 = TopicElement(ownerWorkbook=workbook)

    topic4.setFileHyperlink("d:\exampledemo.jpg"# 为子主题元素设置文件超链接

    topic4.setTitle("topic with a file")

     

    topic1_1 = TopicElement(ownerWorkbook=workbook)

    topic1_1.setTitle("sub topic")

    topic1_1.addLabel("a label"# 为子主题添加标签(official XMind only can a one label

    # 添加子主题到非中心主题

    topic1.addSubTopic(topic1_1)

     

    topic1_1_1 = TopicElement(ownerWorkbook=workbook)

    topic1_1_1.setTitle("topic can add multiple markers")

    # 为主题添加标记

    topic1_1_1.addMarker(MarkerId.starBlue)

    topic1_1_1.addMarker(MarkerId.flagGreen)

    # 为子主题添加子主题

    topic1_1.addSubTopic(topic1_1_1)

     

    topic2_1 = TopicElement(ownerWorkbook=workbook)

    topic2_1.setTitle("topic can add multiple comments")

    # 为主题添加评论

    topic2_1.addComment("I'm a comment!")

    topic2_1.addComment(content="Hello comment!", author='devin')

     

    topic2.addSubTopic(topic2_1)

     

    # 添加子主题元素到中心主题

    root_topic2.addSubTopic(topic1)

    root_topic2.addSubTopic(topic2)

    root_topic2.addSubTopic(topic3)

    root_topic2.addSubTopic(topic4)

     

    # 遍历子主题

    topics = root_topic2.getSubTopics()

    for index, topic in enumerate(topics):

        topic.addMarker("priority-" + str(index + 1)) # 为主题添加标记(优先级图标)

     

    # 为子主题1和子主题2创建关系

    second_sheet.createRelationship(topic1.getID(), topic2.getID(), "relationship test")

     

    # xmind.save(workbook)  # 保存并覆盖原始文件

     

    # 仅保存content.xml

    # xmind.save(workbook=workbook, path="d:\example\other.xmind", only_content=True)  # 不改动原始文件,另存为其它xmind文件

     

    # 仅保存content.xmlcomments.xmlstyles.xml

    # xmind.save(workbook=workbook, path="d:\example\other.xmind", except_revisions=True)  # 不改动原始文件,另存为其它xmind文件

     

    # 保存所有东西,Revisions除外,以节省空间(推荐)

    # xmind.save(workbook=workbook, path="d:\example\other.xmind", except_revisions=True)  # 不改动原始文件,另存为其它xmind文件

     

    # 保存所有内容,并且另存为其它xmind文件(推荐)

    xmind.save(workbook=workbook, path='d:\example\other.xmind'# 不改动原始文件,另存为其它xmind文件,等同 xmind.save(workbook, 'd:\example\exam.xmind')

     

     

     

    运行结果

     

     

     

     

     

     

    解析xmind文件

    #!/usr/bin/env python

    # -*- coding:utf-8 -*-

     

    import json

    import xmind

    import pipes

     

    def dict_to_prettify_json(data):

        print(json.dumps(data, indent=4, separators=(',', ': ')))

     

     

    def custom_parse_xmind(workbook):

        elements = {}

     

        def _echo(tag, element, indent=0):

            title = element.getTitle()

            elements[element.getID()] = title

            print(' ' * indent, tag, ':', pipes.quote(title))

     

        def dump_sheet(sheet):

            root_topic = sheet.getRootTopic()

            _echo('RootTopic', root_topic, 1)

     

            for topic in root_topic.getSubTopics() or []:

                _echo('AttachedSubTopic', topic, 2)

     

            for topic in root_topic.getSubTopics(xmind.core.const.TOPIC_DETACHED) or []:

                _echo('DetachedSubtopic', topic, 2)

     

            for rel in sheet.getRelationships():

                id1, id2 = rel.getEnd1ID(), rel.getEnd2ID()

                print('Relationship: [%s] --> [%s]' % (elements.get(id1), elements.get(id2)))

     

        # 遍历画布

        for sheet in workbook.getSheets():

            _echo('Sheet', sheet)

            dump_sheet(sheet)

     

    # 加载已有xmind文件,如果不存在,则新建

    workbook = xmind.load('D:\example\example.xmind')

    print(workbook.getData()) # 获取整个xmind数据(字典的形式)

    dict_to_prettify_json(workbook.getData())

     

    # 获取某个画布的数据(字典的形式)

    first_sheet = workbook.getPrimarySheet()

    dict_to_prettify_json(first_sheet.getData())

     

    # 获取某个主题数据(字典的形式)

    root_topic = first_sheet.getRootTopic()

    dict_to_prettify_json(root_topic.getData())

     

    # 获取评论数据

    commentsbook = workbook.commentsbook

    print(commentsbook.getData())

     

    # 自定义解析

    custom_parse_xmind(workbook)

     

     

  • 相关阅读:
    Reporting Services无法连接ORACLE,提示:System.Data.OracleClient 需要 Oracle 客户端软件 8.1.7 或更高版本
    ORA-12504:tns:监听程序在 CONNECT_DATA中未获得SERVICE_NAME
    指针
    将gridview 的数据导出EXCEL
    SAP 销售订单中采购标识无法修改
    Spring aop 实例(转)
    JVM — 性能调优
    Linux命令(持续更新)
    J.U.C|一文搞懂AQS(转)
    windows下监控和分析java进程
  • 原文地址:https://www.cnblogs.com/shouke/p/12685235.html
Copyright © 2020-2023  润新知