python:xml.etree.ElementTree 读 Freeplane.mm文件,生成测试案例.csv文件

news2025/1/20 10:56:34

Freeplane 是一款基于 Java 的开源软件,继承 Freemind 的思维导图工具软件,它扩展了知识管理功能,在 Freemind 上增加了一些额外的功能,比如数学公式、节点属性面板等。

强大的节点功能,不仅仅节点的种类很多,而且对于节点的编辑样式也丰富很多,比如数学公式、表格、HTML 的支持等;

思维导图最基本的功能就是新增节点了,Freeplane 通过 Enter 和 Tab 分别新建同级节点和下一级节点。
除了使用上述的基本节点功能外,Freeplane 还提供了 总结节点 的功能,选择一些节点,通过 编辑 -> 新增节点 -> 新增总节点 来增加总结节点。

python:xml.etree.ElementTree 读 Freeplane.mm文件,生成测试案例.csv文件。

编写 fpmm_etree_csv.py  如下.

#-*- coding: UTF-8 -*-
""" 读 Freeplane.mm文件,使用 xml.etree 生成测试案例.csv文件"""
import os
import sys
import codecs
import xml.etree.ElementTree as ET

# 全局唯一标识 unique_id 缩写: uid
uid = 1

def walk(root_node, level, result_list):
    """ 遍历所有的节点 """
    global uid
    if root_node.tag == 'node':
        tmp_list = [uid, level, root_node.tag, root_node.attrib]
        result_list.append(tmp_list)
        uid += 1

    # 遍历每个子节点
    children_node = root_node.getchildren()
    if len(children_node) == 0:
        return
    for child in children_node:
        walk(child, level+1, result_list)
    return

def getXmlData(file_name):
    level = 0 # 节点的深度
    result_list = []
    root = ET.parse(file_name).getroot()
    walk(root, level, result_list)
    return result_list

# main()
if len(sys.argv) ==2:
    f1 = sys.argv[1]
else:
    print('usage: python fpmm_etree_csv.py file1.mm')
    sys.exit(1)

if not os.path.exists(f1):
    print(f"{f1} is not exists.")
    sys.exit(2)

fn,ext = os.path.splitext(f1)
if ext.lower() != '.mm':
    print('ext is not .mm')
    sys.exit(2)

fr = codecs.open(f1, mode='r', encoding="utf-8")
# 读取第一行:
line1 = fr.readline()
if not line1.startswith('<map version='):
    print('it is not freemind map file.')
    sys.exit(3)
fr.close()

# 读取文件 file_name
R = getXmlData(f1)
f2 = fn +'.csv'
fp = codecs.open(f2, 'w', encoding='cp936')
fp.write('应用系统名,测试功能描述,正反向,执行步骤,预期结果\n')

# zd?:字段?的拼音缩写
# zd1: 应用系统名的英文或拼音缩写
# zd2: 模块名
# zd3: 正向 或 反向
# zd4: 功能名
# zd5: 执行步骤
# zd6: 预期结果
for node in R:
    if node[1] ==1:
        zd1 = node[3]['TEXT']
    elif node[1] ==2:
        zd2 = node[3]['TEXT']
    elif node[1] ==3:
        zd3 = node[3]['TEXT']
    elif node[1] ==4:
        zd4 = node[3]['TEXT']
    elif node[1] ==5:
        txt = node[3]['TEXT']
        if txt.startswith('步骤'):
            zd5 = txt[3:]
        elif txt.startswith('预期结果'):
            zd6 = txt[5:]
            csgnms = '-'.join((zd2,zd4)) # 测试功能描述
            line = f'"{zd1}","{csgnms}","{zd3}","{zd5}","{zd6}"\n'
            fp.write(line)
        else:
            zd5 =''
            zd6 =''
fp.close()
print(f'gen: {f2}')

请注意这一关键语句: children_node = root_node.getchildren()

运行 python fpmm_etree_csv.py root_node.mm

生成 root_node.csv

应用系统名,测试功能描述,正反向,执行步骤,预期结果
"root节点","模块1-功能11","正向","1.步骤","1.结果"
"root节点","模块1-功能12","正向","2.步骤","2.结果"
"root节点","模块1-功能11","反向","3.步骤","3.结果"
"root节点","模块1-功能12","反向","4.步骤","4.结果"
"root节点","模块2-功能21","正向","5.步骤","5.结果"
"root节点","模块2-功能22","正向","6.步骤","6.结果"
"root节点","模块2-功能21","反向","7.步骤","7.结果"
"root节点","模块2-功能22","反向","8.步骤","8.结果"

参考:python 使用xml.etree.ElementTree遍历xml所有节点

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1469781.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

git 获取仓库代码与提交代码

1. 建文件夹&#xff0c;获取项目的完整代码 2.Git安装 打开安装程序后&#xff0c;一直点击下一步&#xff0c;直到以下位置&#xff1a; 此处代表使用VIM作为Git默认的编辑器。继续下一步&#xff0c;直到: 这里选择第一项&#xff0c;即仅仅在Bash中使用Git。如果有Linux的学…

电路设计(25)——4位数字频率计的multisim仿真及PCB设计

1.设计要求 使用4位数码管&#xff0c;显示输入信号的频率。完成功能仿真后&#xff0c;用AD软件&#xff0c;画出原理图以及PCB。 2.电路设计 输入信号的参数为&#xff1a; 可见&#xff0c;输入为168HZ&#xff0c;测量值为170HZ&#xff0c;误差在可接受的范围内。 3.PCB设…

C++ 离散化算法设计原则:压缩的都是精华

公众号&#xff1a;编程驿站 1. 离散化 离散化是离散数学中的概念。离散化算法&#xff0c;指把无限空间中的离散数据映射到一个有限的存储空间中&#xff0c;并且对原数据进行有序索引化。主打压缩的都是精化。 离散化流程&#xff1a; 对离散化数列{235,897,458,7654,458…

LeetCode 热题 100 | 二叉树(二)

目录 1 543. 二叉树的直径 2 102. 二叉树的层序遍历 3 108. 将有序数组转换为二叉搜索树 菜鸟做题&#xff0c;语言是 C 1 543. 二叉树的直径 这道题和 124. 二叉树中的最大路径和 太像了 题眼&#xff1a;二叉树的 直径 是指树中任意两个节点之间 最长路径的长度 。…

IS(Inception Score)和FID(Frechet Inception Distance score)的定义,区别,联系。

IS&#xff08;Inception Score&#xff09;和FID&#xff08;Frechet Inception Distance score&#xff09;的定义&#xff0c;区别&#xff0c;联系&#xff1a; IS&#xff08;Inception Score&#xff09; 定义&#xff1a; IS基于Google的预训练网络Inception Net-V3。…

王诗龄奢华归乡,万元外套配三万包抢眼。

♥ 为方便您进行讨论和分享&#xff0c;同时也为能带给您不一样的参与感。请您在阅读本文之前&#xff0c;点击一下“关注”&#xff0c;非常感谢您的支持&#xff01; 文 |猴哥聊娱乐 编 辑|徐 婷 校 对|侯欢庭 范-席林巧妙地将纪梵希的精致夹克、黑色长裤与马丁靴&#xf…

【办公类-22-08】周计划系列(4)“育儿知识(家园小报)“ (2024年调整版本)

作品展示 背景需求&#xff1a; 制作“育儿知识&#xff08;家园小报&#xff09;”&#xff0c;查询发现去年就没有做 因为“家园小报”基本没有段落文字&#xff0c;都是“文本框文字、艺术字“&#xff0c;很难用python提取文字。 由于只有6篇&#xff0c;因此去年采用的就…

【C语言】详解计算机二级c语言程序题

文章目录 前言资料相关程序题 一&#xff08;字符串&#xff09;程序题 二&#xff08;数组&#xff09;程序题 三&#xff08;基础&#xff09;程序题 四&#xff08;结构体&#xff09;程序题 五&#xff08;结构体&#xff09;程序题 六&#xff08;基础&#xff09; 前言 …

【广度优先搜索】【网格】【割点】1263. 推箱子

作者推荐 视频算法专题 涉及知识点 广度优先搜索 网格 割点 并集查找 LeetCode:1263. 推箱子 「推箱子」是一款风靡全球的益智小游戏&#xff0c;玩家需要将箱子推到仓库中的目标位置。 游戏地图用大小为 m x n 的网格 grid 表示&#xff0c;其中每个元素可以是墙、地板或…

C# 使用onnxruntime部署夜间雾霾图像的可见度增强

目录 介绍 模型信息 效果 项目 代码 下载 C# Onnx 使用onnxruntime部署夜间雾霾图像的可见度增强 介绍 github地址&#xff1a;GitHub - jinyeying/nighttime_dehaze: [ACMMM2023] "Enhancing Visibility in Nighttime Haze Images Using Guided APSF and Gradien…

如何实现负载均衡呢?

如何实现负载均衡呢&#xff1f; 一、问题解析 常见的实现方案有三种&#xff01;  基于 DNS 实现负载均衡  基于硬件实现负载均衡  基于软件实现负载均衡 先来说一下基于 DNS 实现负载均衡的方式&#xff0c;它的实现方式比较简单&#xff0c;只需要在 DNS 服务器上…

apidoc接口文档的自动更新与发布

文章目录 一、概述二、环境准备三、接口文档生成1. 下载源码2. 初始化3.执行 四、文档发布五&#xff0c;配置定时运行六&#xff0c;docker运行七&#xff0c;优化方向 一、概述 最近忙于某开源项目的接口文档整理&#xff0c;采用了apidoc来整理生成接口文档。 apidoc是一个…

Java基于SpringBoot的口腔医院管理平台,附源码

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

仿12306校招项目业务三(用户注册)

用户表结构 原本的表结构如下 由于用户量大&#xff0c;采用分库分表&#xff1a; 分库分表设计 根据系统设计的假设&#xff0c;12306 的注册用户规模约为 10 亿&#xff0c;每年新增用户约 1000 万。在用户数据分库或分表之前&#xff0c;我们需要先考虑拆分成多少个库或表…

我们和openAi的差距,只差向神祈祷了?

这两天看到了两张挺有意思的图片&#xff0c;关于openAi研究人员和qianWen的研究人员的日常生活作息表。蛮有意思&#xff0c;看到后有很多感想&#xff0c;特地分享出来。&#xff08;声明&#xff1a;对比没有恶意&#xff0c;也没有好坏之分。他们本都是站在金字塔最顶尖的人…

StarRocks——滴滴OLAP的技术实践与发展方向

原文大佬的这篇StarRocks实践文章整体写的很深入&#xff0c;介绍了StarRocks数仓架构设计、物化视图加速实时看板、全局字典精确去重等内容&#xff0c;这里直接摘抄下来用作学习和知识沉淀。 目录 一、背景介绍 1.1 滴滴OLAP的发展历程 1.2 OLAP引擎存在的痛点 1.2.1 运维…

AI人工智能芯片制作研究与开发技术资料(三百多份文档)【机×密】

收藏多年的精品&#xff0c;不可多得的东西。对芯片开发研究有兴趣同学&#xff0c;赶快下载看看吧。文件大小3G多。 AI人工智能芯片制作研究与开发技术资料&#xff08;三百多份文档&#xff09;【机密】 下载地址&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/14Duh…

【网络安全】SQL注入_sql注入攻击实例(网安人必学系列)

1.1 .Sql注入攻击原理 SQL注入漏洞可以说是在企业运营中会遇到的最具破坏性的漏洞之一&#xff0c;它也是目前被利用得最多的漏洞。要学会如何防御SQL注入&#xff0c;首先我们要学习它的原理。 针对SQL注入的攻击行为可描述为通过在用户可控参数中注入SQL语法&#xff0c;破…

容器镜像详解

1. 镜像组成 一个标准的OCI容器镜像由index, manifest, config, image layers这几个部分组成。 以docker镜像为例&#xff0c;下载的镜像文件保存在/var/lib/docker/目录下面 image/overlay2子目录下面保存着镜像相关的一些元数据 在下面的介绍主要以nginx:latest镜像为例子…

Django定时任务之django_apscheduler使用

Django定时任务之django_apscheduler使用 今天在写一个任务需求时需要用到定时任务来做一部分数据处理与优化&#xff0c;于是在了解完现有方法&#xff0c;结合自己需求决定使用django_apscheduler&#xff0c;记录一下过程&#xff0c;有几篇值得参考的文章放在结尾&#xf…