我们有包含包和子包的模型。那么我们如何通过包名称将指针移动到特定的包。那么有没有办法遍历模型并按名称获取包
答案 0 :(得分:1)
使用
Repositore.SQLQuery("SELECT package_id FROM t_package WHERE name=<theName>")
这将返回一个XML结果集,其中包含具有您要查找的名称的所有包。它可能看起来像这样:
<?xml version="1.0"?>
<EADATA version="1.0" exporter="Enterprise Architect">
<Dataset_0><Data><Row><package_id>1</package_id></Row><Row><package_id>2</package_id></Row><Row><package_id>3</package_id></Row></Data></Dataset_0></EADATA>
因此,你可以在XML解析器中填充它或使用像
这样的正则表达式/package_id>(\d+)/
过滤所有包ID。
反过来简单地使用
Repository.GetPackageById(<found id>)
访问找到的包。
答案 1 :(得分:0)
正如评论中所指出的,这将起作用:
List<EA.Package> myPacks = new List<EA.Package>();
public void GOThroughAllPackages(EA.Package dumpPackage)
{
foreach (EA.Package packages in dumpPackage.Packages)
{
if(packages.Name.ToLower().Equals(requiredPackName))
{
myPacks.Add(packages);
break;
}
GOThroughAllPackages(packages);
}
}
答案 2 :(得分:0)
不需要解析xml字符串的替代解决方案(C#):
List<EA.Package> packages = new List<EA.Package>();
string searchValue = "somePackageName";
var packageElements = Repository.GetElementSet("select o.Object_ID from t_object o inner join t_package p on p.ea_guid = o.ea_guid where o.Name = '"+searchValue+"'",2);
foreach (EA.Element packageElement in packageElements)
{
packages.Add(Repository.GetPackageByGuid(packageElement.ElementGUID);)
}
它使用带有参数Repository.GetElementSet()
的{{1}}来告诉它接受SQL查询
请注意,此解决方案不会返回根软件包,因为它们没有2
对应软件包。