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

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所有节点

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python算法题集_图论(课程表)

Python算法题集_课程表 题207&#xff1a;课程表1. 示例说明2. 题目解析- 题意分解- 优化思路- 测量工具 3. 代码展开1) 标准求解【循环递归全算】2) 改进版一【循环递归缓存】3) 改进版二【循环递归缓存反向计算】4) 改进版三【迭代剥离计数器检测】 4. 最优算法5. 相关资源 本…

单片机精进之路-5矩阵键盘扫描

如下图&#xff0c;先在p3口输出0xfe&#xff0c;再读取p3口的电平&#xff0c;如果没有按键按下&#xff0c;temp & 0xf0还是0xf0&#xff0c;如果又第一个键按下&#xff0c;temp & 0xf0还是0xee&#xff0c;其他按键由此类推可得。 //4*4键盘检测程序,按下键后相应…

Java SpringBoot 创建项目工程输出 Hello World

Java SpringBoot 创建项目工程输出 Hello World 1、新建项目 2、创建 controller 3、编写 Hello World 代码 package com.zhong.demo01.controller;import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.Res…

Jmeter学习系列之八:控制器Controllers 的入门介绍

一、Controllers 简介 Jmeter有两种类型的控制器&#xff1a;Samplers&#xff08;取样器&#xff09;和Logical Controllers&#xff08;逻辑控制器&#xff09;&#xff1b;它们驱动着测试的进行取样器&#xff1a;让jmeter发送请求到服务器以及接收服务器的响应数据逻辑控制…

Redis高可用三主三从集群部署(三种方式部署/18个节点的大集群)

文章目录 &#x1f50a;博主介绍&#x1f964;本文内容使用宝塔面板搭建集群规划配置验证 使用docker搭建使用脚本搭建规划防火墙端口配置脚本redis.conf配置文件执行过程 &#x1f4e2;文章总结&#x1f4e5;博主目标 &#x1f50a;博主介绍 &#x1f31f;我是廖志伟&#xff…

常用的制造企业网络优化方案

在制造业企业不断加速转型的情况下&#xff0c;企业内部数据传输面临了更高的要求。在企业的多站点内部网络互联互通方面&#xff0c;常见的组网网络优化方案有多种选择&#xff0c;每种都有其独特的优势。以下是其中VPN、MPLS、SD-WAN三种主要的组网方案&#xff1a; 1. VPN&a…

热闹元宵进行中,如何利用VR全景展示民宿品牌形象?

错峰出游闹元宵&#xff0c;元宵节恰逢周末&#xff0c;而且还是春节假期返工之后的首个休息日&#xff0c;不少人都想通过短途度假来缓解“节后综合征”。两位数的特价机票、打折的各种酒店让你实现“旅行自由”&#xff0c;那么如何知道特价酒店服务好不好呢&#xff1f;先别…

某电力铁塔安全监测预警系统案例分享

项目概述 电力铁塔是承载电力供应的重要设施&#xff0c;它的安全性需要得到可靠的保障。但是铁塔一般安装在户外&#xff0c;分布广泛&#xff0c;且有很多安装在偏远地区&#xff0c;容易受到自然、人力的影响和破环。因此需要使用辅助的方法实时监控铁塔的安全状态&#xff…

【algorithm】算法基础课---排序算法(附笔记 | 建议收藏)

&#x1f680;write in front&#x1f680; &#x1f4dd;个人主页&#xff1a;认真写博客的夏目浅石. &#x1f381;欢迎各位→点赞&#x1f44d; 收藏⭐️ 留言&#x1f4dd; &#x1f4e3;系列专栏&#xff1a;AcWing算法学习笔记 &#x1f4ac;总结&#xff1a;希望你看完…

移动端学习:如何把exe转换成apk

exe转换成apk是怎么实现的呢?-电脑端-一门科技将exe文件转换成apk文件是一个比较常见的需求,尤其是对于一些开发者和用户来说。但是,这个过程并不是简单的复制和粘贴。在本文中,我们将介绍exe转换成apk的原理和详细介绍。首先,我们需要了解什么https://www.yimenapp.net/k…

YOLOv9图像标注和格式转换

一、软件安装 labelimg安装&#xff08;anaconda&#xff09; 方法一、 pip install labelImg 方法二、 pip install PyQt5 -i https://pypi.tuna.tsinghua.edu.cn/simple/ pip install pyqt5-tools -i https://pypi.tuna.tsinghua.edu.cn/simple/ pip install lxml -i ht…

【软件测试】--功能测试2--常用设计测试用例方法

一、解决穷举场景 重点&#xff1a;使用等价类划分法 1.1 等价类划分法 重点&#xff1a;有效等价和单个无效等价各取1个即可。 步骤&#xff1a;1、明确需求2、确定有效和无效等价3、根据有效和无效造数据编写用例 1.2 案例&#xff08;qq合法验证&#xff09; 需求&#xff…

将仓库A中的部分提交迁移到仓库B中

结论&#xff1a; 使用git format-patchgit am即可实现 使用场景&#xff1a; 例如仓库A这里有5个提交记录&#xff0c;commitid1, commitid2, commitid3, commitid4&#xff0c;commitid5 仓库B想用仓库A中提交的代码&#xff0c;手动改比较慢&#xff0c;当改动较多的时候…

省市区街道/乡镇四级联动vue3

最近优化了一个省.市.区/县、乡镇/街道的四级联动组件&#xff0c;技术栈是element vue3记录一下。 本来是这样的三级联动&#xff1a; 这个三级联动很简单&#xff0c;直接利用el-select组件把地区值带进去就行了&#xff0c;现在要优化成省.市.区/县、乡镇/街道的四级联动&…

数据隐私安全趋势

在当今社交媒体和开源开发的世界中&#xff0c;共享似乎已成为社会常态。毕竟&#xff0c;我们都被教导分享就是关怀。这不仅适用于个人&#xff0c;也适用于公司&#xff1a;无论是有意在社交媒体帐户和公司网站上&#xff0c;还是无意中通过员工的行为&#xff0c;公司可能会…

P1450 [HAOI2008] 硬币购物 dp 容斥 —— s - c[i]*(d[i]+1)怎么理解

[HAOI2008] 硬币购物 - 洛谷 看了洛谷许多题解&#xff0c;一开始理解不了为什么是 s - c[i]*(d[i]1)&#xff0c;为什么要1呢&#xff1f; 其实是dp理解的不好。 这里的意思就是该枚硬币先超过限制&#xff0c;接下来剩下的背包也要填满&#xff0c;4种硬币随便组合的情况数…

【CMU 15-445】Lecture 15: Concurrency Control Theory 学习笔记

Concurrency Control Theory DefinitionsACID: AtomicityACID: ConsistencyACID: IsolationACID: Durability 本节课主要介绍事务的概念和特性。 Definitions 事务是一组数据库操作&#xff08;比如SQL语句&#xff09;的集合&#xff0c;进一步可以抽象为对某些数据对象的读写…

10W 音频功率放大电路芯片TDA2003,可用于汽车收音机及收录机中作音频功率放大器,内部具有短路保护和过热保护等功能

TDA2003 用于汽车收音机及收录机中作音频功率放大器。 采用 TO220B5 封装形式。 主要特点&#xff1a; ⚫ 内部具有短路保护和过热保护。内部具有地线开路、电源极性接 反和负载泄放电压反冲等保护电路。 ⚫ 输出电流大。 ⚫ 负载电阻可低至 1.6 。 …

matlab批量替换txt文本文件的特定行的内容

1.下图所示&#xff0c;我想要替换第14行。 2.运行代码后&#xff0c;第14行已经更改为需要的内容。 clc,clear; %%----------------------需要更改的地方------------------------------------ % 设置要操作的文本文件路径&#xff0c;替换为你自己的文件路径 path D:\paper_…

基于面结构光的高反射物体重建方法(相位偏折术)

Elon Musk曾表示&#xff0c;“在实现全自动驾驶的过程中&#xff0c;三维重建技术是不可或缺的一环。” Facebook的创始人Mark Zuckerberg也指出&#xff0c;“元宇宙时代的来临将更加依赖于高度精细的三维空间表达。” 这些业界巨擘的言论无疑为三维重建的未来发展注入了强大…