現在、プロジェクトに取り組んでおり、XMLファイルから状態と関連する遷移を抽出する必要があります。現在、すべての正しい情報を抽出できますが、ネストされた遷移は状態にリンクされていません。奇妙なXMLファイルのおかげで、すぐに例として作られました。LINQを使用したSCXMLファイルからの読み込み
これは、XMLファイルから情報を抽出するために使用され、私が持っているコード
以下using System;
using System.Linq;
using System.Xml.Linq;
namespace LINQTesting
{
internal class Program
{
private static void Main(string[] args)
{
var xdoc = XDocument.Load(@"C:/ProjectC/XmlConverterTest.xml");
xdoc.Descendants("state").Select(a => new
{
id = a.Attribute("id").Value
}).ToList().ForEach
(a =>
{
Console.WriteLine("Node Name: " + a.id);
});
xdoc.Descendants("transition").Select(d => new
{
action = d.Attribute("event").Value,
target = d.Attribute("target").Value
}).ToList().ForEach
(d =>
{
Console.WriteLine("Action Name: " + d.action);
Console.WriteLine("Target: " + d.target);
});
}
}
}
ですが、私のXMLファイルです:
<statemachine>
<state id="WaitForSelection">
<transition event="Passed" target="AddTo50pBox"/>
</state>
<state id="10p Entered" subworkflow="ValidateCoin">
<transition event="Passed" target="AddTo10pBox"/>
</state>
<state id="20p Entered" subworkflow="ValidateCoin">
<transition event="Passed" target="AddTo20pBox"/>
<transition event="Failed" target="NESTED transition"/>
</state>
<state id="50p Entered" subworkflow="ValidateCoin">
<transition event="Passed" target="AddTo50pBox"/>
</state>
<state id="RejectCoin">
<transition event="CoinRejected" target="DispenseCoin"/>
</state>
<state id="End State">
<transition event="CoinRejected" target="RejectCoin"/>
</state>
</statemachine>
瞬間、私は、集束ないですステートマシンを作成することができます。私はちょうど正しくフォーマットされた情報を提供する必要があります。 「州」検索内のネストされた遷移に対処できないため、2つの別々の子孫を作成しました。私はこれが単純な修正だと確信しています。ちょうどforeach/forループが正しく値を出力するようになっています。
理想的には、すべての状態を最初にリストし、その後に遷移を表示するのではなく、出力を各状態について以下のように読むことが理想的です。
州: "WaitForSelection"
トランジション: "合格"、 "Addto50PBox"
代わり
州の "WaitForSelection"
状態:
を "10Pは、入力しました"トランジション:「合格」、「Addto50PBox」
トランジション:「合格」、「Addto10PBox」
ありがとうございました。
ありがとうございました! –