私は現在エンタープライズ アーキテクト (EA) を使用しており、モデル ダイアグラムから属性と属性値を抽出して XML ファイルに抽出するための小さなアドインを作成しています。EA-API の使用方法は問題ありませんが、私は C# に慣れていないため、C# の実装に問題があります。
最初にコードを投稿し、次に出力ファイルの一部を投稿し、次にどのような出力が必要かの例を投稿します。したがって、少なくとも質問には、私のコードよりも優れた構造があります;)
String writerString3;
String tagString3;
tagString3 = "";
writerString3 = "";
foreach (EA.Element thePackages in myPackage.Packages)
{ // myPackage = the package I select by MenuClick
foreach (EA.Element theElements in myPackage.Elements)
{
foreach (EA.Attribute theAttribute in theElements.Attributes)
{
XElement toXML = new XElement(myPackage.Name.ToString(),
(new XElement(theElements.Name.ToString(),
(new XAttribute(theAttribute.Name.ToString(), theAttribute.Default.ToString())))));
tagString3 = tagString3 + toXML;
}
writerString3 = writerString3 + tagString3;
tagString3 = "";
}
}
foreach (EA.Element theElements in myPackage.Elements)
{
foreach (EA.Attribute theAttribute in theElements.Attributes)
{
XElement toXML = new XElement(myPackage.Name.ToString(),
(new XElement(theElements.Name.ToString(),
(new XAttribute(theAttribute.Name.ToString(), theAttribute.Default.ToString())))));
tagString3 = tagString3 + toXML;
}
writerString3 = writerString3 + tagString3;
tagString3 = "";
}
TextWriter tw = new StreamWriter(myPackage.Name.ToString() + ".xml");
tw.WriteLine(writerString3);
tw.Close(); }
出力は次のようになります: //短縮版
<Application01>
<App01 Name="App01" />
</Application01><Application01>
<App01 ApplicationDomain="xyz" />
</Application01><Application01>
<App01 AbstractionLevel="" />
</Application01><Application01>
<App01_Communication Type="CAN" />
</Application01><Application01>
このように、各行にすべての要素と属性のリストセットが続きます。コードが間違っていることはわかっていますが、適切な方法で修正することはできません。最初にパッケージを選択し、要素を反復処理して、要素ごとに関連する属性と値を出力します。例: 要素 1 属性 11、属性 12、属性 13 要素 2 属性 21、属性 22、属性 23
など...私の好みのXMLファイルは次のようになります。
<packageName>
<Element1>
<Attribute11>value11</Attribute11>
<Attribute22>value22</Attribute22>
<Attribute33>value33</Attribute33>
</Element1>
<Element2>
<Attribute21>value21</Attribute21>
<Attribute22>value22</Attribute22>
<Attribute23>value23</Attribute23>
</Element2>
</packageName>
私の問題を明確にすることができれば幸いです。自分で出来ないかは聞かない。もちろん、別の方法でダイアグラムから属性と要素を取得する方法を誰かが知っている場合は、(EA から提供されたツール以外に) それを聞いて喜んでいます。読んでくれてありがとう、そして助けてくれてありがとう;)