0
我目前正在研究一个项目,我需要从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>
此刻,我不集中能够创建状态机。我只需要能够提供正确格式的信息。 我做了两个单独的后代,因为搜索无法应对“状态”搜索中的嵌套转换。我相当肯定这是一个简单的修复,只是得到一个foreach/for循环来正确打印出值。
因此,理想情况下,每个状态的输出如下所示,而不是先列出所有状态,然后再列出所有状态。
状态: “WaitForSelection”
视线: “合格”, “Addto50PBox”
而不是
状态: “WaitForSelection”
状态: “10P进入”
转场:“合格”,“Addto50PBox”
转换:“通过”,“Addto10PBox”
谢谢你的时间。
非常感谢! –