首页 > 编程语言 >perl 用 XML::LibXML DOM 解析 Freeplane.mm文件,生成测试用例.csv文件

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

时间:2024-03-16 19:31:29浏览次数:20  
标签:XML 文件 txt node file 模块 csv my

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

标签:XML,文件,txt,node,file,模块,csv,my
From: https://blog.csdn.net/belldeep/article/details/136740642

相关文章

  • 本地文件包含漏洞利用
    目录前期信息收集获取网站权限获取服务器权限纵向提权前期信息收集拿到目标的资产,先试一下IP能不能访问探测一下目标的端口运行的是什么服务nmap-sC-sVxx.xx9.95.185-Pn获取网站权限我们可以知道目标的80端口上运行着http服务,服务器是ubuntu,,中间件是apac......
  • C语言葵花宝典之——文件操作
    前言:在之前的学习中,我们所写的C语言程序总是在运行结束之后,就会自动销毁,那如果我们想将一个结果进行长期存储应该如何操作呢?这时候就需要我们用文件来操作。目录1、什么是文件?1.1程序文件1.2数据文件1.3文件名2、二进制文件和文本文件2.1文本文件:2.2二进制文......
  • qt使用本地字体文件
    qt使用本地字体文件qml工程设置使用本地字体文件#include<QGuiApplication>#include<QQmlApplicationEngine>#include<QDebug>#include<QFontDatabase>intmain(intargc,char*argv[]){QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);......
  • 数据爬取与可视化技术——urllib、XPath、lxml案例爬取新浪股票吧
    shy:数据爬取与可视化技术系列已发文三篇了,更多爬虫技术请查看专栏文章。数据爬取与可视化技术——使用urllib库爬取网页获取数据数据爬取与可视化技术——使用XPath和lxml库爬取、解析、提取数据shy:现已开辟专栏四个:C++、ACM、数据库系统概论、数据爬取与可视化技术,更多......
  • 将C++模板应用于多文件编程
    C++模板在将函数应用于多文件编程时,我们通常是将函数定义放在源文件(.cpp文件)中,将函数声明放在头文件(.h文件)中,使用函数时引入(#include命令)对应的头文件即可。编译是针对单个源文件的,只要有函数声明,编译器就能知道函数调用是否正确;而将函数调用和函数定义对应起来的过程,可以延迟到......
  • 如何提高工作/学习效率—管理好网站资源与资料文件
          在日常的学习和工作中,我们经常要利用互联网(百度、博客等),那我们怎么样才能高效快捷的利用好网络资源呢?小编今天在这里为大家分享一下自己的方法,管理好网站资源与资料文件,如有不同见解,恳请指教~        最常用的搜索网站就是百度了,当我们需要使用博客......
  • 小白解决Win11(Win10)下.html文件默认打开方式无法修改,绑定为IE浏览器 iexplorer.exe
    解决方法按Win+R键,输入regedit,地址栏输入计算机\HKEY_CLASSES_ROOT\IE.AssocFile.HTM\shell\opennew\command双击(默认),将"C:\ProgramFiles(x86)\internetexplorer\iexplore.exe"%1修改成"你的浏览器的路径"%1(英文的双引号不要去掉)OK了如何查找浏览器的路径打开任......
  • linux命令最全-文件管理篇
    Linuxcat命令 Linux命令大全cat(英文全拼:concatenate)命令用于连接文件并打印到标准输出设备上。使用权限所有使用者语法格式cat [-AbeEnstTuv] [--help] [--version] fileName参数说明:-n或--number:由1开始对所有输出的行数编号。-b或--number-nonblank:和-n相似,只不......
  • [maven] maven settings.xml/pom.xml之repositories/pluginRepositories元素
    0序repositories针对项目本身的【JAR依赖】,通过repositories进行自定义配置。pluginRepositories针对的是maven命令需要的【插件依赖】地址(比如clean、install都是maven的插件),通过pluginRepositories进行自定义配置。如果只配置了repositories,则:打包时,默认的【插件依赖】......
  • 访问Webapp目录下面的html文件变为代码
    一、问题由来一位朋友最近在学习JavaWeb开发,使用Servlet做练习的时候,突然出现一个问题。他去访问自己创建的html文件时,发现返回的数据是html代码,而不是解析后的页面。很是疑惑,自己尝试着解决这个问题,很久都没有解决问题,然后就找到我。问题复现情况如下,正常来说,访问html页......