继我的上一篇博客,在得到DOORS的整个目录树结构以后,项目(Project)和文件夹(Folder)的下一层即是模块(Module),我们已经可以得到Module的绝对路径,那么下一步我们可以利用这个绝对路径把它下面对应的所有Object按层次显示出来(分为Heading和Text),最后拼接成XML字符串的形式返回。
主要思路和得到目录树的思路类似,只不过DXL已经给我们提供了一个可以直接得到一级Object的for循环(for object in top Module do…),然后对一级Object进行遍历即可。
代码如下:
string str = ""
//对一级Object进行遍历
void scanObject(Object o)
{
Object obj
for obj in o do
{
if (null obj) continue
string head = obj."Object Heading"
//此object是Heading
if(!null head)
{
str = str "<object type=\"heading\" value=\""head"\">\n"
//递归遍历
scanObject(obj)
str = str "</object>\n"
}
//此object是Text
else
{
string st = obj."Object Text"
str = str "<object type=\"text\" value=\""st"\"/>\n"
}
}
}
string getModuleReq(string modulePath)
{
Module m = read(modulePath)
//获得Module中的所有一级Object
Object o
for o in top m do
{
//一级可能是Text吗?
/*string sh = o."Object Heading"
str = str "<object type=\"heading\" value=\""sh"\">\n"
scanObject(o)
str = str "</object>\n"*/
//判断第一级是Heading还是Text
if (null o) continue
string head = o."Object Heading"
//此object是Heading
if(!null head)
{
str = str "<object type=\"heading\" value=\""head"\">\n"
scanObject(o)
str = str "</object>\n"
}
//此object是Text
else
{
string st = o."Object Text"
str = str "<object type=\"text\" value=\""st"\"/>\n"
}
}
return str
}
//测试代码
string s = getModuleReq("/Test/功能需求")
print s "\n"