Freeplane 是一款基于 Java 的开源软件,继承 Freemind 的思维导图工具软件,它扩展了知识管理功能,在 Freemind 上增加了一些额外的功能,比如数学公式、节点属性面板等。
强大的节点功能,不仅仅节点的种类很多,而且对于节点的编辑样式也丰富很多,比如数学公式、表格、HTML 的支持等;
思维导图最基本的功能就是新增节点了,Freeplane 通过 Enter 和 Tab 分别新建同级节点和下一级节点。
除了使用上述的基本节点功能外,Freeplane 还提供了 总结节点 的功能,选择一些节点,通过 编辑 -> 新增节点 -> 新增总节点 来增加总结节点。
先编写一个测试脚本 test_xmlParser.groovy 如下
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 如下
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
应用系统名,测试功能描述,正反向,执行步骤,预期结果
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.结果