首页 > 其他分享 >xmind文件数据解析重构成mindmap可识别数据

xmind文件数据解析重构成mindmap可识别数据

时间:2023-09-11 15:33:56浏览次数:33  
标签:name title topics mindmap xmind xmindparser 解析 数据

【需求背景】

  • 测试平台开发中,需要引入前端mindmap模块,进行在线xmind实时解析并前端展示

【卡点难点】

  • 选取什么库进行xmind解析
  • 如何转换成mindmap可以识别的数据

【xmind解析】

  • 直接选用官方xmind-sdk-python,发现已经2018后停止维护了,解析最新版本报无法识别错误,弃用
  • 直接去github上查最新维护的库,发现xmindparser库还可以使用,且方法简便易于上手,以下是内置api
    is_xmind_zen #是否为xmind文件
    xmind_to_dict #解析xmind成为字典
    xmind_to_json #解析xmind成为json
    xmind_to_xml #解析xmind成为xml
    xmind_to_file #解析xmind成为json或xml,其余报错
点击查看代码
import xmindparser
path = r"xxx.xmind"
print(xmindparser.is_xmind_zen(path)) #判断是否xmind文件
print(xmindparser.xmind_to_dict(path)) #解析成字典
print(xmindparser.xmind_to_json(path)) #解析成json
print(xmindparser.xmind_to_xml(path)) #解析成xml
print(xmindparser.xmind_to_file(path,'json')) #解析成json

【转换mindmap数据】

  • 通过查询mindmap的文档,数据与xmind文档解析出来的不一致
    xmind解析数据结构如下:
点击查看代码
[
    {
        "title": "画布 1",
        "topic": {
            "title": "主题",
            "topics": [
                {
                    "title": "子题主",
                    "topics": [
                        {
                            "title": "孙主题",
                            "topics": [
                                {
                                    "title": "孙孙主题",
                                    "topics": [
                                        {
                                            "title": "叶子节点"
                                        }
                                    ]
                                }
                            ]
                        }
                    ]
                }
            ]
        },
        "structure": "org.xmind.ui.logic.right"
    }
]
而mindmap数据结构如下:
点击查看代码
[
    {
        "name": "主题",
        "children": [
            {
                "name": "子题主",
                "children": [
                    {
                        "name": "孙主题",
                        "children": [
                            {
                                "name": "孙孙主题",
                                "children": [
                                    {
                                        "name": "叶子节点",
                                    }
                                ],
                            }
                        ],
                    }
                ],
            }
        ],
    }
]

【算法思路】

  • 通过观察可知,两者只是key不同,需要title换成name,topics换成children即可

【方案一】
直接暴力replace替换

点击查看代码
data = xmindparser.xmind_to_dict(file)
res = [eval(str(data).replace('title','name').replace('topics','children'))[0]['topic']]
print(res)

【方案二】
由于层级不确定,使用递归更加优雅高级

点击查看代码
data = xmindparser.xmind_to_dict(path)
def recursion(data):
	# 不存在topics则是叶子节点直接返回
	if not data.get('topics',None):
		return {'name':data['title']}
	return {'name':data['title'],'children':[recursion(topic) for topic in data['topics']]}
res = [{'name':i['title'],'children':[recursion(i['topic'])]} for i in data]
print(res)

【总结】
这里利用递归方法解决了一个数据结构重构的算法,最终效果如图。
image
——每日进步亿点点,每年钱包鼓点点

标签:name,title,topics,mindmap,xmind,xmindparser,解析,数据
From: https://www.cnblogs.com/mabudong/p/17692840.html

相关文章

  • hive数据仓库(3)
    Hive操作数据库操作--创建数据库可以再dbs表中查看具体信息createdatabasemydb1;--创建数据库指定具体位置createdatabasemydb1location'/user/hive/db';--删除数据库dropdatabasemydb1;表操作load导入数据本质相当于使用hdfs的put命令,将数据上传到hdfs中--创建......
  • 如何实现数据流畅转换?火山引擎ByteHouse推出ELT能力
    更多技术交流、求职机会,欢迎关注字节跳动数据平台微信公众号,回复【1】进入官方交流群在数据分析场景中,企业使用的数据通常具备来源多样化的特点,如支付交易记录、用户行为等,且数据格式各异,有的为行式存储结构,有的为列式存储结构。这就要求企业数仓具备一定的数据转换能力。传统方式......
  • Navicat 携手华为云GaussDB,联合打造便捷高效的数据库开发和建模工具方案
    本文分享自华为云社区《Navicat携手华为云GaussDB,联合打造便捷高效的数据库开发和建模工具方案》,作者:GaussDB数据库。近日,NavicatPremium顺利完成与华为云GaussDB的兼容性测试认证,并获得华为云授予的技术认证书。Navicat作为华为云GaussDB生态工具合作伙伴以及G......
  • 机器自主学习创造新数据
    近年来,人工智能(AI)的发展带来了许多革命性的改变。其中,生成式AI(GenerativeAI),也被称为AIGC(ArtificialIntelligenceGeneratedContent),引起了人们的极大关注。生成式AI是一种使机器能够以人类类似的方式学习和生成新信息的算法和技术。这种技术的目标不是取代人类,而是成为人类的辅助......
  • 软件测试|Python数据可视化神器——pyecharts教程(七)
    pyecharts绘制炫酷日历图什么是日历图日历图(CalendarChart)是一种用于可视化时间序列数据的图表类型。它以日历的形式展示数据,将时间与数据值结合在一起,使得数据的周期性和趋势在日历的视觉布局中更加直观和易于理解。在日历图中,每个单元格代表一个日期(通常是天),并用不同的颜色、大......
  • 以程序员视角讲述关于api数据接口的应用
    作为一名程序员,API数据接口是我们日常工作中不可或缺的一部分。API,即ApplicationProgrammingInterface,应用程序编程接口,是一种用于访问特定软件包或服务的预定义函数和过程。通过API,我们可以从各种数据源获取数据,并将其用于构建应用程序、网站或其他数字工具。下面,我将以一个程序......
  • 数据库----初识
    《世界诞生的前夜----开发环境配置》在进入数据库开发软件时遇到这样一个错误:  看起来是SQLServer(数据库管理系统)发生了错误,  找到数据库管理系统设置工具,让SQLServer运行起来就行了......
  • 从数据开始,构建值得信赖的生成式AI应用
    随着人工智能技术的不断发展和应用,生成式AI成为了近年来最受关注的技术之一。生成式AI是指通过机器学习算法来生成全新的、真实的、有用的数据,例如文本、图像、音频和视频等。这种技术的出现,不仅可以极大地提高人们的生产效率,还可以帮助人们更好地理解和探索世界。但是,要想构建一个......
  • 采集设备接线需注意问题 数据采集仪器接线常见问题及解答
    采集设备接线需注意问题数据采集仪器接线常见问题及解答在采集设备接线时,需要注意以下几个问题:线材选择:选择质量好、耐磨、耐高温、导电性能稳定的线材。接线端子:接线端子应该选用质量可靠的产品,接线时应注意端子与线材之间的插头是否紧固且无松动。接线顺序:采集设备的接线应按......
  • 极光笔记 | 推送服务数据中心选择:合规性与传输效率的双重考量
    随着全球化进程的深入,跨境数据传输与存储问题已经变得愈发重要。推送服务的数据中心节点选择不仅关乎数据访问速度和用户体验,同时也直接牵扯到数据合规性和安全保障。EngageLabPush深知这一点,为了满足更多国际客户和全球用户触达需求,我们不断拓宽服务边界,推出了可选地点的数据中心......