xmind文件数据解析重构成mindmap可识别数据
【需求背景】
- 测试平台开发中,需要引入前端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)
【总结】
这里利用递归方法解决了一个数据结构重构的算法,最终效果如图。

——每日进步亿点点,每年钱包鼓点点
xmind文件数据解析重构成mindmap可识别数据的更多相关文章
- 070.Python聚焦爬虫数据解析
一 聚焦爬虫数据解析 1.1 基本介绍 聚焦爬虫的编码流程 指定url 基于requests模块发起请求 获取响应对象中的数据 数据解析 进行持久化存储 如何实现数据解析 三种数据解析方式 正则表达式 ...
- Java数据解析之JSON
文章大纲 一.JSON介绍二.常见框架介绍与实战三.Studio中GsonFormat插件使用四.项目源码下载(含参考资料)五.参考文档 一.JSON介绍 1. 简介 JSON 的全称是 Ja ...
- GPS数据解析
1.摘要 GPS模块使用串口通信,那么它的的数据处理本质上还是串口通信处理,只是GPS模块的输出的有其特定的格式,需要字符串处理逻辑来解析其含义.如何高效的处理从GPS模块接收到的数据帧,是GPS驱动 ...
- 提效工具-python解析xmind文件及xmind用例统计
现状 每个公司都有一个维护测试case的系统,有自研的也有买的,比如QC, 禅道等等,QA往往习惯使用xmind等思维导图工具来编写测试用例,因为思路清晰,编写方便,那么这就有一个问题,大多公司要求所 ...
- 【spark】文件读写和JSON数据解析
1.读文件 通过 sc.textFile(“file://") 方法来读取文件到rdd中. val lines = sc.textFile("file://")//文件地 ...
- Unity3d-XML文件数据解析&JSON数据解析
1.XML文件数据解析:(首先须要导入XMLParser解析器,The latest released download from:http://dev.grumpyferret.com/unity/ ...
- Plist文件与数据解析
综述 初步阶段当我们做个需要点数据的练习时(比如购物商品展示),我们可能是将数据直接写在代码中,比如说定义一个字符串数组或存放字典的数组.但这其实并不是一种合理的做法.因为如果当数据修改的时候,就要经 ...
- 导入数据任务(id:373985)异常, 错误信息:解析导入文件错误,请检查导入文件内容,仅支持导入json格式数据及excel文件
小程序导入,别人导出的数据库json文件,错误信息如下: 导入数据库失败, Error: Poll error, 导入数据任务(id:373985)异常,错误信息:解析导入文件错误,请检查导入文件内容 ...
- 重新装Mysql后原来数据的恢复办法:即一个版本的mysql的data文件夹下的所有的数据,怎么去加载到另一个安装的mysql中
重新装Mysql后原来数据的恢复办法本博客:http://blog.csdn.net/xiaowu_zhu/article/details/71188955 不管是重新装系统或者数据库时,总会遇到怎么 ...
- PE文件结构部分解析以及输入的定位
原文链接地址:http://www.cnblogs.com/shadow-lei/p/3554670.html PE文件定义 PE 文件("Portable executable" ...
随机推荐
- Vue——登录小案例、scoped、ref属性、props其他、混入mixin、插件、Element-ui
解析Vue项目 # 1 为什么浏览器中访问某个地址,会显示某个页面组件 根组件:APP.vue 必须是 <template> <div id="app"> ...
- JavaCV的摄像头实战之八:人脸检测
欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 本篇概览 本文是<JavaCV的摄像头实战> ...
- 使用Kettle定时从数据库A刷新数据到数据库B
一.需求背景 由于项目场景原因,需要将A库(MySQL)中的表a.表b.表c中的数据定时T+1 增量的同步到B库(MySQL).这里说明一下,不是数据库的主从备份,就是普通的数据同步.经过技术调研,发 ...
- influxdb常用sql总结
本文为博主原创,转载请注明出处: 1.登录influxdb influx -username admin -password "password" 2.查看数据库 ##查看有哪些数 ...
- 记一次.Net分布式事务死锁现象以及解决方法
在本文中,将介绍一次遇到的.Net分布式事务死锁现象以及解决方法.我们将首先了解事务框架的构成,然后分析导致死锁的代码,最后提出解决方法. 事务框架 本次开发框架JMSFramework将分布式事务划 ...
- uniapp学习(一)
[新课uniapp零基础入门到项目打包(微信小程序/H5/vue/安卓apk)全掌握] https://www.bilibili.com/video/BV1mT411K7nW/?p=24&sh ...
- Federated Learning003
联邦学习笔记--003 2022.11.28周一 今天主要学习了几篇优秀的博客,补充了一些知识. (一)联邦学习面临的挑战 非独立同分布的数据 有限通信带宽 不可靠和有限的设备 什么是Non-IID( ...
- 安装.NET Framework4.5以上版本受阻怎么办?
安装和卸载 .NET Framework 受阻疑难解答 - .NET Framework | Microsoft Learn Windows RT 8.1.Windows 8.1 和 Windows ...
- Pandas:获取Dataframe索引
解决方案 效果图 参考链接 https://blog.csdn.net/YENTERTAINR/article/details/109254583
- 如何提升 API-First 设计流程
一个 API-First 设计应该具有可复用性.互操作性.可修改性.用户友好性.安全性.高效性.务实性,并且重要的是,与组织目标保持一致.这些基本特征将确保 API 能够有效地为 API- First ...