perl 用 XML::LibXML DOM 解析 Freeplane.mm文件,生成测试用例.csv文件

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

在云计算中,解析XML元素和属性是一种常见的操作,因为XML是一种常见的数据交换格式,可以用来表示各种不同的数据结构和信息。Perl 是一种过去流行的脚本语言,可以用来处理各种文本数据,包括XML数据。

在Perl 中,可以使用各种模块和函数来解析 XML元素和属性。其中,最常用的模块是  XML::LibXML,它提供了一组完整的XML解析和处理函数,可以非常方便地解析XML文档中的元素和属性。

例如,下面是一个使用 XML::LibXML 模块 DOM方式 解析 XML元素和属性 的示例代码:

编写  test_LibXML_dom.pl  如下

#!/usr/bin/perl
use 5.010;
use strict;
use warnings;
use utf8;
use XML::LibXML;# 解析 Freeplane.mm文件,生成测试用例.csv文件
#  xt: 应用系统名的英文或拼音缩写
# testno: 测试用例编号
# zd?: 字段?的拼音缩写
# zd1: 模块名
# zd2: 功能名
# zd3: 正向 或 反向
# zd4: 测试要点
# zd5: 执行步骤
# zd6: 预期结果
# csylms:测试用例描述if ($#ARGV != 0){die "You must specify a file.xml to parse";
}
my $file = shift @ARGV;# 创建一个XML解析器对象
my $p = XML::LibXML->new();# 解析XML文档
my $dom = $p->load_xml(location => $file)or die "cannot read file.xml\n";my $f2 = $file .'.csv';
# 写入文件
open(my $fw, '>:encoding(UTF-8)', $f2) or die "cannot open file '$f2' $!";
print $fw "应用系统名,模块名,测试用例描述,正反向,执行步骤,预期结果\n";# 要检查一个字符串是否以另一个字符串开始,可使用字符串比较:
sub startsWith {  my ($str, $prefix) = @_;  return substr($str,0, length($prefix)) eq $prefix;
} my $root = $dom->documentElement;
my($node) = $root->getChildrenByTagName('node');
say '$node is a ', ref($node);#获取某个节点的TEXT属性和属性值
sub getAttribute {my($node) = @_;my @attrs = $node->attributes();my $txt ='';foreach my $attr (@attrs) {if( $attr->nodeName() eq 'TEXT'){$txt = $attr->value();$txt =~s/\s+$//;}    }return $txt;
}
my $xt = getAttribute($node);
#print $xt; 
my ($zd1,$zd2,$zd3,$zd4,$zd5,$zd6,$txt,$csylms);
$zd5 =''; $zd6 ='';
#my @childs = $node->childNodes;
foreach my $node1 ($node->childNodes){if( $node1->nodeName() eq 'node'){$zd1 = getAttribute($node1);foreach my $node2 ($node1->childNodes){if( $node2->nodeName() eq 'node'){$zd2 = getAttribute($node2);foreach my $node3 ($node2->childNodes){if( $node3->nodeName() eq 'node'){$zd3 = getAttribute($node3);foreach my $node4 ($node3->childNodes){if( $node4->nodeName() eq 'node'){$zd4 = getAttribute($node4);foreach my $node5 ($node4->childNodes){if( $node5->nodeName() eq 'node'){$txt = getAttribute($node5);if (startsWith($txt, '步骤:')){$zd5 = substr($txt, 3);} elsif (startsWith($txt, '预期结果:')){$zd6 = substr($txt, 5);$csylms = $zd2 .'-'. $zd4; # 测试用例描述print $fw "$xt,$zd1,$csylms,$zd3,$zd5,$zd6\n";} else {$zd5 =''; $zd6 ='';}}}}}}}}}}
}
close($fw);

注意关键这一句:my $dom = $p->load_xml(location => $file);
上一篇对应这句:my $doc = $parser->parse_file($file);

运行 perl test_LibXML_dom.pl your_test.mm 

应用系统名,模块名,测试用例描述,正反向,执行步骤,预期结果
应用系统,模块1,功能11-测试要点111,正向,1.步骤,1.结果
应用系统,模块1,功能11-测试要点112,正向,2.步骤,2.结果
应用系统,模块1,功能11-要点111,反向,3.步骤,3.结果
应用系统,模块1,功能11-要点112,反向,4.步骤,4.结果
应用系统,模块2,功能21-测试要点211,正向,5.步骤,5.结果
应用系统,模块2,功能21-测试要点212,正向,6.步骤,6.结果
应用系统,模块2,功能21-要点211,反向,7.步骤,7.结果
应用系统,模块2,功能21-要点212,反向,8.步骤,8.结果

参阅:The Document Object Model — Perl XML::LibXML by Example documentation

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

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

相关文章

vite打包流程和原理

文章目录 打包原理Vite比Webpack快?在生产环境下的表现启动项目后,完成加载比较慢?Esbuild & Rollup热更新 打包原理 vite利用了ES module这个特性,使用vite运行项目时,首先会用esbuild进行预构建,将所…

迷宫寻路[天梯赛 -- 栈]

文章目录 题目描述思路AC代码 题目描述 输入样例 8 8 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 0 0 1 1 0 0 0 1 1 1 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 1 0 0 0 1 1 1 0 1 1 0 1 0 0 0 0 0 0 0 4 4 0 0 1 0 0 0 0 0 0 0 1 1 0 1 0 0 -1 -1输出样例 1,1 2,1 3,1 4,1 5,1 5,2 5…

【Session】Tomcat Session 集群

设备 nginx:192.168.67.11 tomcat1:192.168.67.12 tomcat2:192.168.67.13安装nginx (192.168.67.11) #关闭防火墙和安全机制 [roottest1 ~]# systemctl stop firewalld [roottest1 ~]# setenforce 0#安装epel源 [ro…

【AI+办公】利用AI软件制作PPT提升工作效率

最近看了很多AI相关信息的输入,很多使用AI软件赚钱的文章或付费课程,思路多多少少自己了解不少,后面有时间分享下。本篇主题是,利用AI软件制作PPT提升工作效率。对于上班族来说,提升工作效率也是一种节省个人时间的方式…

002——编译鸿蒙(Liteos -a)

目录 一、鸿蒙是什么 二、Kconfig 2.1 概述 2.2 编译器 2.3 make使用 本文章引用了很多韦东山老师的教程内容,算是我学习过程中的笔记吧。如果侵权请联系我。 一、鸿蒙是什么 这里我补充一下对鸿蒙的描述 这张图片是鸿蒙发布时使用的,鸿蒙是一个很…

hcia复习总结5

路由表 路由器的转发原理&#xff1a;当一个数据包进入路由器&#xff0c;路由器将基于数据包中的 目标IP地址查看本地的 路由表 。如果路由表中存在记录&#xff0c;则将 无条件 按照 路由表记录执行&#xff1b;如果没有记录&#xff0c;则将该数据包直接丢弃。 <aa…

基于变分模态分解与平稳小波变换的信号联合降噪(MATLAB R2021B)

变分模态分解VMD与递归式模态分解(EMD等)所采取的层层筛选模式有本质的不同&#xff0c;其整体框架是变分问题的求解&#xff0c;并且具有坚实的理论基础。 关于递归式模态分解(EMD等)的研究&#xff0c;实践超前于理论&#xff0c;目前尚没有严格的理论支持&#xff0c;递归式…

无硫防静电手指套:高科技产业的纯净与安全新选择

随着科技的飞速发展&#xff0c;高科技产业对于生产环境的纯净度和产品的防静电要求日益严格。为了满足这一高标准的需求&#xff0c;无硫防静电手指套应运而生&#xff0c;以其独特的无硫特性和出色的防静电功能&#xff0c;迅速成为了高科技产业中的纯净与安全新选择。 无硫手…

生成器模式(软考uml C++版)

按照软考中级软件设计师中指定的生成器模式uml图&#xff0c;可编写对应的C&#xff0b;&#xff0b;代码&#xff1a; #include<iostream> #include<vector> #include<string> using namespace std;/*创建者模式&#xff0c;又名生成器模式意图&#xff1a…

html5的css使用display: flex进行div居中的坑!

最近做项目的时候&#xff0c;有个需求&#xff0c;一个高度宽度不确定的Div在另一个Div内上下左右居中。 然后以前上下居中用的都是很繁琐的&#xff0c;就打算去百度搜索一个更优秀的方法。 百度AI自己给我一个例子&#xff1a; /* div在容器里居中显示&#xff0c;设置外容…

Linux_socket编程

套接字通信 socket 接口 守护进程 一.套接字通信 端口号&#xff1a; 端口号是一个2字节16位的整数;端口号用来标识一个进程, 告诉操作系统, 当前的这个数据要交给哪一个进程来处理; 一台主机可以根据ip地址定位另一台主机&#xff0c;而两台主机之间的通信本质是进程在通信。…

Mybatis(搭建,CRUD,方法参数,XML映射文件,动态SQL)【详解】

目录 一.准备基础代码 Mybatis的通用配置 二. 基本CURD操作 1.查询-根据id查询一条 2.查询-查询数量 3.删除 4.新增 获取主键值 5.修改 6.查询-模糊查询 预编译SQL #{}与${}的区别【面试题】 三. Mybatis的方法参数与结果集 1.SQL里取方法参数的值 2.查询结果集…

固定资产管理系统:井然有序,提升利用率,降损增值的解决之道。

固定资产管理系统是一种用于管理和跟踪组织内固定资产的软件系统。固定资产是指组织长期持有并用于生产、运营或提供服务的资产&#xff0c;例如土地、建筑物、机器设备、车辆等。 固定资产管理系统提供了一种集中管理和监控固定资产的方式&#xff0c;帮助组织更好地管理其资产…

人工智能 安装GPU环境 windows版

准备工作 需要有NVIDIA账号 磁盘要有50G 空间 我这里是 aws的 G4dn 虚拟机, 对应的 Tesla显卡,操作系统windows2022 1,安装VS 用社区版2019即可 https://my.visualstudio.com/Downloads?PId8228 2,下载完后运行程序选择C桌面版 大概5-10个G 3,下载完后运行一下 有账号就输…

房天下登录接口JS逆向

声明 本文章中所有内容仅供学习交流&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff0c;若有侵权&#xff0c;请联系我立即删除&#xff01; 逆向目标 目标&#xff1a;房天下账号密码登录 主页&#xff1a;https://passport.…

HarmonyOS NEXT应用开发—自定义日历选择器

介绍 本示例介绍通过CustomDialogController类显示自定义日历选择器。 效果图预览 使用说明 加载完成后显示主界面&#xff0c;点当前日期后会弹出日历选择器&#xff0c;选择日期后会关闭弹窗&#xff0c;主页面日期会变成选定的日期。 实现思路 获取当前月和下个月的日期…

WIFI 7技术的应用前景

随着WIFI 7技术的不断成熟和普及&#xff08;如果对WIFI 7技术不太了解的&#xff0c;可以点击链接去查看一下这篇文章WIFI7&#xff1a;开启无线通信新纪元 &#xff09;&#xff0c;我们正迎来一个数字连接的全新时代。WIFI 7作为新一代无线网络标准&#xff0c;将极大的改变…

Selenium 是什么?简单了解Selenium

Selenium Selenium 是什么 Selenium 是一款 Web UI 测试工具&#xff0c;是一款 自动化测试 工具&#xff0c;使用 Selenium 测试工具进行的测试通常被称为 Selenium Testing&#xff0c;各种支持如下列表&#xff1a; UI 元素的支持与管理&#xff1a;自写代码实现浏览器支…

【Qt】用Qt开发需要购买授权吗?——关于(L)GPL证书的详解

目录 Qt证书体系开源证书解读Qt官方对(L)GPL的描述自由度要求 GPL vs. LGPL完整条款 总结参考 Qt证书体系 你在用Qt开发应用的过程中&#xff0c;是否也担心过授权问题&#xff1f; 按照官方说法 The Qt framework is dual-licensed, available under both commercial and op…

Leetcode 3.15

Leetcode hot100 二叉树1.二叉搜索树中第K小的元素2.二叉树展开为链表3.从前序与中序遍历序列构造二叉树 二叉树 1.二叉搜索树中第K小的元素 二叉搜索树中第K小的元素 最重要的知识点&#xff1a;二叉树搜索树的中序遍历是升序的。 方法一&#xff1a;我们只需存储升序遍历&…