groovy:XmlParser 读 Freeplane.mm文件,生成测试案例.csv文件

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

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

思维导图最基本的功能就是新增节点了,Freeplane 通过 Enter 和 Tab 分别新建同级节点和下一级节点。

除了使用上述的基本节点功能外,Freeplane 还提供了 总结节点 的功能,选择一些节点,通过 编辑 -> 新增节点 -> 新增总节点 来增加总结节点。

先编写一个测试脚本 test_xmlParser.groovy 如下

java 复制代码
import groovy.util.XmlParser

class Example {
   static void main(String[] args) {
      if (args.size() <1){
          println " usage: groovy test_xmlparser file1.mm ";
          return
      }
      def file1 = args[0]; 
      def parser = new XmlParser();
      def doc = parser.parse(file1);
      doc.node.each{ it ->
        println("${it['@TEXT']}");
        it.node.each{ it1 ->
           println("${it1['@TEXT']}");
           it1.node.each{ it2 ->
              println("${it2['@TEXT']}");
              it2.node.each{ it3 ->
                 println("${it3['@TEXT']}");
                 it3.node.each{ it4 ->
                    println("${it4['@TEXT']}");
                    it4.node.each{ it5 ->
                       println("${it5['@TEXT']}");
                    }
                 }
              }
           }
        }
      }
   }
}

运行 groovy test_xmlParser.groovy root_node.mm

对于node元素本身,我们使用@符号显示附加到node元素的TEXT属性。

再编写 mm_xmlParser_csv.groovy 如下

java 复制代码
import groovy.util.XmlParser
// XmlParser 读 Freeplane.mm文件,生成测试案例.csv文件
//zd?:字段?的拼音缩写
//zd1: 应用系统名的英文或拼音缩写
//zd2: 模块名
//zd3: 正向 或 反向
//zd4: 功能名
//zd5: 执行步骤
//zd6: 预期结果
// Freemind map file1 -> XmlParser => file2.csv
class FmmXmlParser {
   static void main(String[] args) {
      if (args.size() <1){
          println " usage: groovy test_xmlparser file1.mm ";
          return;
      }
      def f1 = args[0];
      File file1 = new File(f1);
      if (!file1.exists()) {
          println(f1 +" not found.");
          return;
      }
      def f2 = f1.replace('.mm','.csv')
      if (f1.equals(f2)){
          println 'file.ext is not .mm';
          return;
      }
      File file2 = new File(f2);
      def fp = file2.newPrintWriter();
      fp.println "应用系统名,测试功能描述,正反向,执行步骤,预期结果";
      
      def parser = new XmlParser();
      def doc = parser.parse(f1);
      
      String zd1,zd2,zd3,zd4,zd5,zd6,txt,csgnms;
      doc.node.each{ it ->
        zd1 = "${it['@TEXT']}";
        it.node.each{ it2 ->
           zd2 = "${it2['@TEXT']}";
           it2.node.each{ it3 ->
              zd3 = "${it3['@TEXT']}";
              it3.node.each{ it4 ->
                 zd4 = "${it4['@TEXT']}";
                 it4.node.each{ it5 ->
                    txt = "${it5['@TEXT']}";
                    if (txt.startsWith("步骤")){
                        zd5 = txt.substring(3);
                    } else if (txt.startsWith("预期结果")){
                        zd6 = txt.substring(5);
                        csgnms = zd2 +'-'+ zd4; //测试功能描述
                        fp.println "${zd1},${csgnms},${zd3},${zd5},${zd6}";
                    } else {
                        zd5=''; zd6='';
                    }                   
                 }
              }
           }
        }
      }
      fp.flush();
      fp.close();
      println "gen: "+ f2;
   }
}

运行 groovy mm_xmlParser_csv root_node.mm

java 复制代码
应用系统名,测试功能描述,正反向,执行步骤,预期结果
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.结果
相关推荐
极光代码工作室6 分钟前
基于SpringBoot的课程预约系统
java·springboot·web开发·后端开发
Leighteen37 分钟前
`try-finally` 里的 `return`:为什么 `finally` 会悄悄改掉返回值、吞掉异常
java·开发语言
名字还没想好☜1 小时前
Go 的 time.After 在 select 循环里内存泄漏:定时器堆积原理与 timer.Reset 正确姿势
java·数据库·golang·go·goroutine
圆山猫2 小时前
[Virtualization](三):RISC-V H-extension 与 Guest 执行模式
android·java·risc-v
caishenzhibiao2 小时前
期货先行者主图 同花顺期货通指标
java·c语言·c#
史呆芬2 小时前
分布式事务实战:微服务跨服务数据一致性解决方案
java·后端·spring cloud
IT界的老黄牛2 小时前
限流命中后该怎么办:直接丢、阻塞等待、延迟重投三种姿势的取舍
java·rocketmq·redisson·令牌桶·削峰·分布式限流
daad7773 小时前
记录matlab状态机demo
java·网络·matlab
牡丹雅忻14 小时前
AES 加密模式演进:从 ECB、CBC 到 GCM 的 C# 深度实践
java·开发语言·c#
学者猫头鹰4 小时前
Java 8 核心新特性
java